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

本文关键字:线程 运行 检测 | 更新日期: 2023-09-27 17:48:51

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

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

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

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

最简单的选项(如果手边有表单/控件)是选中InvokeRequired。

在没有这种情况下,您可以尝试使用SynchronizationContext来模拟Post或Send,检查在哪个线程上发生?调用Send或Post将切换到UI线程。