Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查主线程是否忙?_C#_Com - Fatal编程技术网

C# 如何检查主线程是否忙?

C# 如何检查主线程是否忙?,c#,com,C#,Com,我有一个CAD插件应用程序。在我的CAD应用程序中,CAD可能会限制哪些螺纹可用于修改CAD主体。 以下是我的要求: 由于COM调用是在不同的线程上接收的,因此插件必须确保所有构造调用都在正确的线程(主线程)中进行 此外,由于内核可以在CAD繁忙时调用插件,因此插件必须确保能够安全地调用构造线程,而不会造成死锁 一个有效的解决方案可能是在尝试使用主(构造)线程之前检查主(构造)线程是否繁忙 所以我的问题是:如何检查主线程是否繁忙?我遇到了一个类似的问题,并通过以下方式解决了它: Manual

我有一个CAD插件应用程序。在我的CAD应用程序中,CAD可能会限制哪些螺纹可用于修改CAD主体。 以下是我的要求:

  • 由于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等以及您的代码),这应该为您完成以下工作:如何在调用任何方法之前确保主线程可用