作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我类的一个片段:
public bool start()
{
Thread startThread = new Thread(this.ThreadDealer);
startThread.Start();
return _start;
}
在 ThreadDealer() 中,我将 bool 变量“_start”设置为 false 或 true。我现在需要但似乎无法弄清楚的是在 ThreadDealer()-Thread 完成时提醒 start() 执行其返回语句的事件。
我用 AutoResetEvent 和 .WaitOne() 尝试了一些东西,但是因为我有一个 GUI 只会阻止一切,虽然它做了我需要它做的事情(等待线程完成),但如果它阻止了我的 GUI,它就没用了.
如有任何帮助,我们将不胜感激。
最佳答案
您想在 UI 线程的方法中等待后台线程,但仍然允许 UI 响应 - 是不可能的。您需要将代码分成两部分:一部分在启动(或并行)后台线程之前执行,另一部分在后台线程完成后运行。
最简单的方法是使用 BackgroundWorker class .它在完成工作后在 UI 线程 (RunWorkerCompleted
) 中引发一个事件。这是一个例子:
public void start()
{
var bw = new BackgroundWorker();
// define the event handlers
bw.DoWork += (sender, args) => {
// do your lengthy stuff here -- this will happen in a separate thread
...
};
bw.RunWorkerCompleted += (sender, args) => {
if (args.Error != null) // if an exception occurred during DoWork,
MessageBox.Show(args.Error.ToString()); // do your error handling here
// Do whatever else you want to do after the work completed.
// This happens in the main UI thread.
...
};
bw.RunWorkerAsync(); // starts the background worker
// execution continues here in parallel to the background worker
}
关于C#.net - 如何提醒程序线程已完成(事件驱动)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5551258/
我是一名优秀的程序员,十分优秀!