Winform c# 异步多线程,定时执行方法。异步多线程协同管理
时间: 2023-07-12 07:13:43 浏览: 139
在Winform C#中实现异步多线程协同管理可以使用Task类和Timer类。以下是一个基本的示例:
```csharp
private CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
private async void btnStart_Click(object sender, EventArgs e)
{
try
{
// 取消之前的任务
cancellationTokenSource.Cancel();
cancellationTokenSource = new CancellationTokenSource();
// 开始新的任务
await Task.Run(() => StartTask(cancellationTokenSource.Token), cancellationTokenSource.Token);
}
catch (OperationCanceledException)
{
MessageBox.Show("任务已取消");
}
}
private async Task StartTask(CancellationToken cancellationToken)
{
// 定义定时器
var timer = new System.Timers.Timer(1000);
timer.Elapsed += async (s, e) =>
{
// 检查是否已取消任务
if (cancellationToken.IsCancellationRequested)
{
timer.Stop();
cancellationToken.ThrowIfCancellationRequested();
}
// 执行任务
await Task.Run(() =>
{
// TODO: 执行需要异步处理的任务
});
};
timer.Start();
// 等待任务完成或取消
await Task.Delay(Timeout.Infinite, cancellationToken);
}
```
在以上示例中,点击`btnStart`按钮会启动一个新的任务,同时会取消之前的任务(如果存在)。任务会定时执行`StartTask`方法中的异步任务。如果任务被取消,则会抛出`OperationCanceledException`异常。
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)