不知道问题问得对不对,CancellationTokenSource.Cancel() 退出 Task 后,想再次启动同一 Task ,貌似不行:
private void button1_Click(object sender, EventArgs e)
{
Thread t1 = new Thread(ThreadMain);??//用线程,避免阻塞界面
t1.Start();
}
CancellationTokenSource cts = new CancellationTokenSource();
public void ThreadMain()
{
int count = 0;
while (count < 5) //要循环5次
{
count++;
//此处应该如何操作cts或者cts.Token,让第一次cts.Cancel()后能够在此复位,以继续正常运行Task???
Task.Factory.StartNew(MyTask, cts.Token);
Thread.Sleep(5 * 1000); //等待任务执行5秒
cts.Cancel(); //取消任务
richTextBox1.Text += "count = " + count.ToString() + "\r\n";
}
richTextBox1.Text += "已停止";
}
public void MyTask()
{
while (!cts.IsCancellationRequested) //判断是否取消任务,由上面的cts.Cancel()控制
{
richTextBox1.Text += DateTime.Now + "\r\n";
Thread.Sleep(1000);
}
}
目前运行结果如下:
2015/4/11 14:43:23
2015/4/11 14:43:24
2015/4/11 14:43:25
2015/4/11 14:43:26
2015/4/11 14:43:27
count = 1
count = 2
count = 3
count = 4
count = 5
已停止
就是说第一次运行了Task,并cts.Cancel()后,Task再也没有运行了
怎么让cts.Cancel()后复位,让Task能够再次正常运行呢?
感谢各位大虾指导,^_^
------解决思路----------------------
CancellationTokenSource每次用时需要重新new