gpt4 book ai didi

c# - Task.Run 和 UI 进度更新

转载 作者:太空宇宙 更新时间:2023-11-03 15:16:19 24 4
gpt4 key购买 nike

此代码片段来自Stephen Cleary's blog并举例说明如何在使用 Task.Run 时报告进度。我想知道为什么更新 UI 没有跨线程问题,我的意思是为什么不需要调用?

private async void button2_Click(object sender, EventArgs e)
{
var progressHandler = new Progress<string>(value =>
{
label2.Text = value;
});
var progress = progressHandler as IProgress<string>;
await Task.Run(() =>
{
for (int i = 0; i != 100; ++i)
{
if (progress != null)
progress.Report("Stage " + i);
Thread.Sleep(100);
}
});
label2.Text = "Completed.";
}

最佳答案

Progress<T>捕获当前 SynchronisationContext当它被实例化时。每当您调用Report ,它 secret 地将其委托(delegate)给捕获的上下文。在示例中,捕获的上下文是 UI,这意味着不会发生异常。

关于c# - Task.Run 和 UI 进度更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38953713/

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