gpt4 book ai didi

c# - 线程工作时启用/禁用按钮

转载 作者:行者123 更新时间:2023-12-04 10:49:42 26 4
gpt4 key购买 nike

我有一个启动两个线程的按钮

private void CrawdBtn_Click(object sender, EventArgs e)
{
CrawdBtn.Enabled = false;
t = new Thread(AddLinksToList);
b = new Thread(EnqueueFromList);
t.Start();
b.Start();
}

还有其他按钮可以暂停、恢复、停止这些线程
我的问题是如何在线程工作时禁用(暂停、恢复、停止)按钮并在线程完成后重新启用 Crawl

最佳答案

以下是如何开始 Thread并有办法等待其完成:

public static Thread CreateAwaitableThread(Action action, out Task threadCompletion)
{
var tcs = new TaskCompletionSource<bool>();
threadCompletion = tcs.Task;
return new Thread(() =>
{
try
{
action();
}
finally
{
tcs.SetResult(true);
}
});
}

该方法返回新创建的 Thread ,还有一个 Task这将在 Thread 时完成完成了。你可以像这样使用它:
private async void CrawdBtn_Click(object sender, EventArgs e)
{
CrawdBtn.Enabled = false;
Thread t1 = CreateAwaitableThread(AddLinksToList, out var t1c);
Thread t2 = CreateAwaitableThread(EnqueueFromList, out var t2c);
t1.Start();
t2.Start();
await Task.WhenAll(t1c, t2c);
CrawdBtn.Enabled = true;
}

如果出现异常,错误将不会通过 Task 传播。 .假定委托(delegate)已经包含错误处理逻辑。如果没有,将照常发生未处理的异常。

关于c# - 线程工作时启用/禁用按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59546633/

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