异步在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();
}
}
}
画面显示如下




浙公网安备 33010602011771号