c# – WPF TPL重新启动已取消的任务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – WPF TPL重新启动已取消的任务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1956字,纯文字阅读大概需要3分钟。
内容图文
![c# – WPF TPL重新启动已取消的任务](/upload/InfoBanner/zyjiaocheng/808/ed9cba748ce643ee9061505229867fa4.jpg)
这是我的问题:我使用Click事件取消了一个可以正常工作的任务.现在,我想通过单击最初启动任务的同一启动事件来重新启动任务.
我得到的“错误”是我收到MessageBox信息(“Stop Clicked”).所以我“陷入”清理任务中.
我该如何解决这个问题?
非常感谢帮助.
谢谢!
这是我的代码:
public partial class MainWindow
{ CancellationTokenSource cts = new CancellationTokenSource();
ParallelOptions po = new ParallelOptions();
}
private void Start_Click(object sender, RoutedEventArgs e)
{ var uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
CancellationToken token = cts.Token;
ParallelOptions po = new ParallelOptions();
po.CancellationToken = cts.Token;
po.MaxDegreeOfParallelism = System.Environment.ProcessorCount;
Task dlTask = Task.Factory.StartNew(() =>
{ do
{ token.ThrowIfCancellationRequested();
Parallel.For(0, dicQueryNoQueryURL.Count, po
, i =>
{ token.ThrowIfCancellationRequested();
if (!token.IsCancellationRequested){// do work
}
});
}
while (!token.IsCancellationRequested);
}, token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
dlTask.ContinueWith(
(antecedents) =>
{ if (token.IsCancellationRequested){
MessageBox.Show("Stop Clicked");
}
else
{ MessageBox.Show("Signalling production end"); }
dlTask.Dispose();
}, uiScheduler);
}
private void btnStop_Click(object sender, RoutedEventArgs e){ cts.Cancel(); }
解决方法:
单击“开始”时,尝试创建新的CancellationTokenSource并生成新的令牌.
private void Start_Click(object sender, RoutedEventArgs e)
{
cts = new CancellationTokenSource();
var uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
CancellationToken token = cts.Token;
...
从在线书籍:
One cancellation token should refer to one “cancelable operation,”
however that operation may be implemented in your program. After the
IsCancellationRequested property of the token has been set to true, it
cannot be reset to false. Therefore, cancellation tokens cannot be
reused after they have been canceled.
内容总结
以上是互联网集市为您收集整理的c# – WPF TPL重新启动已取消的任务全部内容,希望文章能够帮你解决c# – WPF TPL重新启动已取消的任务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。