美文网首页
C#:教你进度条的核心代码

C#:教你进度条的核心代码

作者: 五维思考 | 来源:发表于2020-02-06 21:05 被阅读0次

说明:利用多线程显示进度,防止主线程假死,子线程实时向主线程报告进度状况,主线程可提前结束子线程。看懂下面的代码你也就学会在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; }
    }
}
image.png

相关文章

网友评论

      本文标题:C#:教你进度条的核心代码

      本文链接:https://www.haomeiwen.com/subject/tzzuxhtx.html