gpt4 book ai didi

c# - 任务不更新WPF中的UI

转载 作者:行者123 更新时间:2023-12-03 13:21:27 26 4
gpt4 key购买 nike

我写了这段代码:

public double SumRootN(int root)
{
double result = 0;
for (int i = 1; i < 10000000; i++)
{
tokenSource.Token.ThrowIfCancellationRequested();
result += Math.Exp(Math.Log(i) / root);
}
return result;
}

private void btnclick_Click(object sender, RoutedEventArgs e)
{
tokenSource = new CancellationTokenSource();
txttest.Text = "";

var watch = Stopwatch.StartNew();
List<Task> tasks = new List<Task>();
var ui = TaskScheduler.FromCurrentSynchronizationContext();
for (int i = 2; i < 20; i++)
{
int j = i;
var compute = Task.Factory.StartNew(() =>
{
return SumRootN(j);
}, tokenSource.Token);

tasks.Add(compute);

var displayResults = compute.ContinueWith(
resultTask =>
txttest.Text
+= "root " + j.ToString() + " " +
compute.Result.ToString() +
Environment.NewLine,
CancellationToken.None,
TaskContinuationOptions.OnlyOnRanToCompletion,
ui);
}
}

它可以在WPF中工作,但是当我以这种方式编写此代码时;
tokenSource = new CancellationTokenSource();
var watch = Stopwatch.StartNew();
List<Task> tasks = new List<Task>();
var ui = TaskScheduler.FromCurrentSynchronizationContext();

Report
+= ((Microsoft.Office.Interop.Excel.Range)_sheet.Cells[row, "B"]).Value2;

var compute = Task.Factory.StartNew(() =>
{
return Report;
}, tokenSource.Token);

tasks.Add(compute);

var displayResults
= compute.ContinueWith(resultTask =>
txtReport.Text
+= compute.Result.ToString() +
Environment.NewLine,
CancellationToken.None,
TaskContinuationOptions.OnlyOnRanToCompletion,
ui);

它不起作用,但是 txtReport.Text具有正确的值,但是它不在操作中间显示,但是当操作结束时 txtReport显示它的值

为什么此代码不起作用?

最佳答案

ContinueWith创建一个继续执行,该继续执行在目标Task完成时异步执行。也就是说,只有在您的SumRootN操作完成后,它才会更新结果。

关于c# - 任务不更新WPF中的UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7966082/

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