C# 如何检查主线程是否忙?
我有一个CAD插件应用程序。在我的CAD应用程序中,CAD可能会限制哪些螺纹可用于修改CAD主体。 以下是我的要求:C# 如何检查主线程是否忙?,c#,com,C#,Com,我有一个CAD插件应用程序。在我的CAD应用程序中,CAD可能会限制哪些螺纹可用于修改CAD主体。 以下是我的要求: 由于COM调用是在不同的线程上接收的,因此插件必须确保所有构造调用都在正确的线程(主线程)中进行 此外,由于内核可以在CAD繁忙时调用插件,因此插件必须确保能够安全地调用构造线程,而不会造成死锁 一个有效的解决方案可能是在尝试使用主(构造)线程之前检查主(构造)线程是否繁忙 所以我的问题是:如何检查主线程是否繁忙?我遇到了一个类似的问题,并通过以下方式解决了它: Manual
- 由于COM调用是在不同的线程上接收的,因此插件必须确保所有构造调用都在正确的线程(主线程)中进行
- 此外,由于内核可以在CAD繁忙时调用插件,因此插件必须确保能够安全地调用构造线程,而不会造成死锁
所以我的问题是:如何检查主线程是否繁忙?我遇到了一个类似的问题,并通过以下方式解决了它:
ManualResetEvent waiter = new ManualResetEvent(false);
control.BeginInvoke((Action)(() => waiter.Set()));
bool threadIdle = waiter.WaitOne(timeout);
将超时设置为您想要的等待时间(例如500毫秒)如果主线程忙,那么无论如何您都会被冻结您支持的线程模型。通常对于这样的应用程序,使用STA,此线程模型只接受一个线程上的调用。@Rahul如何通过编程检查主线程是否忙?这是另一种方法。您不必检查任何内容,您应该使用适当的SynchronizationContext(取决于您的应用程序、Winforms、WPF、no UI等以及您的代码),这应该为您完成以下工作:如何在调用任何方法之前确保主线程可用