异步在UI中的应用

1、使用异步UI 刷新不受代码的影响。

  
    public partial class MainWindow : Window
    {
        CancellationToken ct;
        CancellationTokenSource ctSource;
        public MainWindow()
        {
            InitializeComponent();
        }
    private async void btnProcess_Click(object sender, RoutedEventArgs e)
    {
        btnProcess.IsEnabled = false;
        ctSource = new CancellationTokenSource();
        ct = ctSource.Token;
        int compelectPercent = 0;
        for (int i = 0; i < 10; i++)
        {
            if (ct.IsCancellationRequested)
            {
                break;
            }
            try
            {
                await Task.Delay(500, ct);
                compelectPercent = (i + 1) * 10;
            }
            catch (TaskCanceledException ex)
            {

                compelectPercent = (i * 10);
            }
            progressBar.Value = compelectPercent;
        }
        string  message=ct.IsCancellationRequested ? string.Format($"Process was cancelled {compelectPercent}"):"Process compelect normally";
        MessageBox.Show(message, "Compelected Status");
        progressBar.Value = 0;
        btnCancel.IsEnabled = true;
        btnProcess.IsEnabled = true;

    }
    private void btnCancel_Click(object sender, RoutedEventArgs e)
    {
        if (!btnProcess.IsEnabled)
        {
            btnCancel.IsEnabled = false;
            ctSource.Cancel();
        }
    }
}


画面显示如下



posted @ 2022-02-14 15:23  跨界专家  阅读(43)  评论(0)    收藏  举报