c#关闭一个使用Application.Run()的线程
本文关键字:Application Run 线程 一个 | 更新日期: 2023-09-27 18:10:58
我正在尝试使用我可以访问代码的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. abort()实际上并没有杀死线程。有没有办法从DLL外部强制中止Application.Run()调用?
如果你能找到一个由DLL后台线程创建的窗口句柄(如表单或隐藏的应用程序窗口),你可以向该句柄发布一个WM_QUIT消息,这应该会导致DLL干净地退出消息循环
你将需要得到一个实例的形式是运行在另一个线程,然后调用形式。BeginInvoke并从那里调用Application。退出
应用程序呢?ExitThread