C# 显示任务内函数的运行时间。运行C
我想在文本框中显示使用Task.Run调用的函数的执行时间,因为它需要一些时间 为了完成,我为此创建了一个线程 问题是当我点击开始按钮时,文本框1中的时间会立即打印出来,我想显示 已用时间,但仅在MyFunction完成处理后或按下“取消”按钮时 你应该去哪里停 “开始”和“取消”按钮的当前代码为:C# 显示任务内函数的运行时间。运行C,c#,multithreading,elapsedtime,C#,Multithreading,Elapsedtime,我想在文本框中显示使用Task.Run调用的函数的执行时间,因为它需要一些时间 为了完成,我为此创建了一个线程 问题是当我点击开始按钮时,文本框1中的时间会立即打印出来,我想显示 已用时间,但仅在MyFunction完成处理后或按下“取消”按钮时 你应该去哪里停 “开始”和“取消”按钮的当前代码为: void Begin_Click(object sender, EventArgs e) { Stopwatch sw = Stopwatch.StartNew();
void Begin_Click(object sender, EventArgs e)
{
Stopwatch sw = Stopwatch.StartNew();
// Pass the token to the cancelable operation.
cts = new CancellationTokenSource();
Task.Run(() => MyFunction(inputstring, cts.Token), cts.Token);
sw.Stop();
textBox1.Text += Math.Round(sw.Elapsed.TotalMilliseconds / 1000, 4) + " sec";
}
void Cancel_Click(object sender, EventArgs e)
{
if (cts != null)
{
cts.Cancel();
cts = null;
}
}
您没有等待MyFunction完成,您只是在计算任务的开始时间。运行调用。要等待MyFunction完成,可以等待Task.Run返回的任务 如果您对异步编程不熟悉,请先阅读MyFunctioninputstring的示例代码cts.Token,然后?参数CancellationTokenSource.Token?
async void Begin_Click(object sender, EventArgs e)//<--Note the async keyword here
{
Stopwatch sw = Stopwatch.StartNew();
// Pass the token to the cancelable operation.
cts = new CancellationTokenSource();
await Task.Run(() => MyFunction(inputstring, cts.Token), cts.Token);//<--Note the await keyword here
sw.Stop();
textBox1.Text += Math.Round(sw.Elapsed.TotalMilliseconds / 1000, 4) + " sec";
}