gpt4 book ai didi

C#.net - 如何提醒程序线程已完成(事件驱动)?

转载 作者:太空狗 更新时间:2023-10-29 19:49:43 24 4
gpt4 key购买 nike

这是我类的一个片段:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com