我正在尝试使用可以访问其代码的 C# DLL,但实际上我无法更改代码并构建它的自定义版本。调用代码是一个 C# WinForms 项目,C# DLL 也使用 WinForms 来处理 Windows 系统事件。问题是 DLL 使用后台线程在其中使用 Application.Run() ,并且有内置的方法可以杀死或停止该线程。这是代码片段:
public class DllClass
{
private Thread uithread = null;
private bool uithreadstarted = false;
public DllClass()
{
uithread = new Thread(new ThreadStart(RunDll));
uithread.IsBackground = true;
uithread.SetApartmentState(ApartmentState.STA);
uithread.Start();
do
{
Thread.Sleep(100);
} while (uithreadstarted == false);
}
private void RunDll()
{
//other init stuff here
uithreadstarted = true;
Application.Run();
}
}
显然,我希望杀死它的方式是使用 Application.Exit(),但这也退出了我自己的 WinForms 项目,这不是我想要发生的。如果我只是关闭我的应用程序而不调用 Application.Exit(),则 DLL 将继续在后台运行。我希望能够实例化 DllClass 对象,使用它,然后在完成后将其关闭。我想出了一个方法来获取它正在运行的线程的 Thread 对象,但是在它上面调用 Thread.Abort() 实际上并没有杀死线程。有没有办法从 DLL 外部强制中止 Application.Run() 调用?