|
TAPはあまり使い慣れていないので勉強も兼ねて
BackgroundWorker的なことをやってみました。
※間違えていることもあります。
CancellationTokenSource ts;
private async void button2_Click(object sender, EventArgs e)
{
ts = new CancellationTokenSource(5000);
var progress = new Progress<int>(Progress); // UIスレッド上で実行する必要がある
await Work(ts.Token, progress);
label2.Text = "終了";
}
async Task Work(CancellationToken token, IProgress<int> progress)
{
for (;;)
{
foreach (var value in Enumerable.Range(0, 100))
{
if (token.IsCancellationRequested)
{
return;
}
await Task.Delay(10);
progress.Report(value);
}
}
}
void Progress(int Value)
{
label1.Text = Value.ToString();
}
private void button3_Click(object sender, EventArgs e)
{
ts.Cancel();
}
|