【问题标题】:How to check If main thread is busy or not?如何检查主线程是否忙?
【发布时间】:2018-03-21 16:41:32
【问题描述】:

我有一个 CAD 插件应用程序。在我的 CAD 应用程序中,CAD 可能对可以使用哪个线程来修改 CAD 主体有限制。 这是我的要求:

  • 由于 COM 调用是在不同线程上接收的,因此插件必须确保所有构造调用都在正确的线程(主线程)中进行。
  • 此外,由于内核可以在 CAD 忙碌时调用插件,因此插件必须确保它可以安全地调用构造线程而不会造成死锁。

一个有效的解决方案可能是在尝试使用主(构造)线程之前检查它是否正忙。

所以我的问题是:如何检查主线程是否忙?

【问题讨论】:

  • 如果主线程很忙,那么无论如何你都会被冻结
  • 你支持什么线程模型。通常对于此类应用程序会使用 STA,并且此线程模型仅接受一个线程上的调用。
  • @Rahul 如何以编程方式检查主线程是否忙?
  • 这是相反的。您无需检查任何内容,您应该使用正确的 SynchronizationContext(取决于您的应用程序、Winforms、WPF、无 UI 等以及您的代码),这应该为您完成工作:stackoverflow.com/questions/18097471/…
  • 在调用任何方法之前如何确保主线程可用

标签: c# com


【解决方案1】:

我遇到了类似的问题,通过以下方式解决了:

ManualResetEvent waiter = new ManualResetEvent(false);
control.BeginInvoke((Action)(() => waiter.Set()));
bool threadIdle = waiter.WaitOne(timeout);

将超时设置为您想要的任何等待时间(例如 500 毫秒)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多