我正在创建一个C#dll,它将被WinForms中的其他开发人员使用。出于某些原因,我想检测,如果来自此库的方法是从Main(GUI)线程调用的,并警告开发人员他已经完成了这样的事情(即在日志文件中)。有没有合理的方法从主线程中检测调用方法? 请记住,我无法访问WinForm应用程序。
答案 0 :(得分:17)
在这种情况下,一个简单的解决方案是在主UI线程上创建的库程序集中声明一个静态控件。如果要检测是否从主线程调用库,请使用以下
if (MyLibraryControl.InvokeRequired)
//do your thing here
答案 1 :(得分:2)
最简单的选项(如果你有一个表单/控件方便)是检查InvokeRequired。
如果没有,你可以尝试使用SynchronizationContext
来模拟帖子或发送,检查发生在哪个线程上?调用Send或Post将切换到UI线程。