检测C#库中主线程的运行情况

时间:2008-10-22 12:29:50

标签: c# .net winforms multithreading

我正在创建一个C#dll,它将被WinForms中的其他开发人员使用。出于某些原因,我想检测,如果来自此库的方法是从Main(GUI)线程调用的,并警告开发人员他已经完成了这样的事情(即在日志文件中)。有没有合理的方法从主线程中检测调用方法? 请记住,我无法访问WinForm应用程序。

2 个答案:

答案 0 :(得分:17)

在这种情况下,一个简单的解决方案是在主UI线程上创建的库程序集中声明一个静态控件。如果要检测是否从主线程调用库,请使用以下

if (MyLibraryControl.InvokeRequired)
  //do your thing here

答案 1 :(得分:2)

最简单的选项(如果你有一个表单/控件方便)是检查InvokeRequired。

如果没有,你可以尝试使用SynchronizationContext来模拟帖子或发送,检查发生在哪个线程上?调用Send或Post将切换到UI线程。