说明:利用多线程显示进度,防止主线程假死,子线程实时向主线程报告进度状况,主线程可提前结束子线程。看懂下面的代码你也就学会在WinForm上显示进度条了!
class Program
{
static void Main(string[] args)
{
CancellationTokenSource cts = new CancellationTokenSource();
Action<IProgress<ProgressStatus>> threadMethod = (p =>
{
int count = 0;
while (!cts.IsCancellationRequested && count <= 100)
{
count++;
p.Report(new ProgressStatus
{
value = count,
message = $"已完成{count}%"
});
Thread.Sleep(200);
}
});
var progress = new Progress<ProgressStatus>(report =>
{
Console.WriteLine($"value={report.value}, message={report.message}");
});
Task.Factory.StartNew(() =>
{
Console.WriteLine("=================线程启动================");
threadMethod(progress);
Console.WriteLine("=================线程结束================");
}, cts.Token);
Console.WriteLine("================主线程开始=================");
for (int i = 0; i < 100; i++)
{
Thread.Sleep(200);
if (i==20)
{
cts.Cancel();
Console.WriteLine("================点击结束按钮=================");
break;
}
}
Console.WriteLine("================主线程结束=================");
Console.ReadKey();
}
private class ProgressStatus
{
public int value { get; set; }
public string message { get; set; }
}
}

网友评论