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

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

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

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

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

如果没有,你可以尝试使用SynchronizationContext来模拟Post或Send,检查发生了什么线程? 调用Send或Post将切换到UI线程。