我正在设计一个多线程进程,我在其中创建一个线程来执行一些处理,以免锁定 UI。但是,当此线程完成时(如果它成功完成且没有错误)我需要一个事件以便我可以在 UI 线程上执行一个方法来正确更新 UI。
我怎样才能正确地完成这个?
我的线程的简单代码:
Thread t = new Thread(new ThreadStart(GetAppUpdates));
t.Start();
现在我需要知道线程何时完成,但我觉得我不想实现会不断检查线程状态的代码,因为这会导致 UI 延迟。
(我知道使用 backgroundworker 会更容易,但我不想为这个进程使用 backgroundworker,因为这个线程不能是后台)。
有没有办法在 Thread 对象完成时触发事件?完成 ThreadFinished() 事件的最佳方法是什么? Thread 成功完成后,我有必须在主 UI 上执行的代码。
最佳答案
传递新的匿名方法,该方法调用 GetAppUpdates()
和一些其他方法,通知您更新已完成:
Thread t = new Thread(new ThreadStart(() => { GetAppUpdates(); Completed(); }));
t.Start();
Completed
方法将在您的 GetAppUpdates()
方法执行后被调用:
private void Completed()
{
if (InvokeRequired)
{
Invoke((MethodInvoker)delegate() { Completed(); });
return;
}
// update UI
}
顺便说一句 这将完成这项工作,但我最好使用 BackgroundWorker - 它专为此类任务而设计,它的 RunWorkerCompleted 事件处理程序将在 UI 线程上运行,这非常方便。
关于c# - 多线程问题 - 线程完成后需要事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13850247/