【发布时间】:2015-06-17 02:11:29
【问题描述】:
我需要将一些进程移至异步。我有 5 个方法需要单独调用并在后台运行,以便用户可以继续他们的工作。
下面的测试代码似乎可以工作......但我无法弄清楚如何返回指示任务已完成的信息(消息)。该类将从单独的窗口窗体中调用,以便显示进度....
来自表格:
async void BtnGo_Click(object sender, System.EventArgs e)
{
label2.Text = @"Starting tasks...";
var progress = new Progress<string>(
p =>
{
label2.Text = p;
});
await TestTask.MyTestMain(progress);
}
班级:
public static class TestTask
{
public static Task MyTestMain(IProgress<string> pProgress)
{
return SomethingAsync(pProgress);
}
private static async Task SomethingAsync(IProgress<string> pProgress)
{
var t1 = SomeThing1(pProgress);
var t2 = SomeThing2(pProgress);
await Task.WhenAll(t1, t2);
if (pProgress != null) pProgress.Report(@"all tasks completed");
}
private static async Task SomeThing1()
{
await Task.Delay(9000);
var filename = @"c:\temp\tt1.txt";
if (File.Exists(filename))
File.Delete(filename);
using (TextWriter tw = new StreamWriter(filename))
{
await tw.WriteLineAsync(DateTime.Now.ToLongDateString());
}
if (pProgress != null) pProgress.Report(@"t1 completed");
}
private static async Task SomeThing2()
{
await Task.Delay(7000);
var filename = @"c:\temp\tt2.txt";
if (File.Exists(filename))
File.Delete(filename);
using (TextWriter tw = new StreamWriter(filename))
{
await tw.WriteLineAsync(DateTime.Now.ToLongDateString());
}
if (pProgress != null) pProgress.Report(@"t2 completed");
}
}
我想知道每项任务何时完成。任何帮助或指导将不胜感激。
编辑 我编辑了这篇文章以反映我的更改...我仍然无法将进度报告返回到 UI...有什么想法吗?
【问题讨论】:
标签: c# winforms asynchronous async-await