C# 实现一个可取消的多线程操作 示例
生活随笔
收集整理的這篇文章主要介紹了
C# 实现一个可取消的多线程操作 示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
private void button1_Click(object sender, EventArgs e){//定義一個為可取消資源標志CancellationTokenSource cts = new CancellationTokenSource();//定義二個為可取消資源標志CancellationTokenSource cts1 = new CancellationTokenSource();//實現一個可取消操作的回調函數,ThreadPool.QueueUserWorkItem(o => Count(cts.Token, 1000000));//為可取消資源標志注冊取消后的回調函數(無參,無返回值,匿名委托)cts.Token.Register(() => Console.WriteLine("Canceled 1")); //為可取消資源標志注冊取消后的回調函數(有參,無返回值,顯式申明委托)cts.Token.Register(o => TestCancellationMethead(1000, 10), true);cts1.Token.Register(() => Console.WriteLine("Canceled 2"));///連接兩個可取消資源標志var LinkedCts = CancellationTokenSource.CreateLinkedTokenSource(cts.Token, cts1.Token);///給連接后的可取消資源標志集注冊回調函數(匿名委托),集合中任意一個可取消資源標志取消,都將觸發該回調函數LinkedCts.Token.Register(() => Console.WriteLine("linkedCts canceled"));Thread.Sleep(300);cts.Cancel();}void TestCancellationMethead(int x, int y){Console.WriteLine("取消后的回調函數" + x + y);}/// <summary>/// 一個可取消操作的回調函數,函數的關鍵是傳入一個CancellationToken對象/// </summary>/// <param name="token"></param>/// <param name="countTo"></param>void Count(CancellationToken token, Int32 countTo){Console.WriteLine("一個可取消的操作開始執行");for (int count = 0; count < countTo; count++){if (token.IsCancellationRequested){Console.WriteLine("$" + count.ToString());Console.ReadLine();break;}Console.WriteLine("|" + count.ToString());Console.ReadLine();}}
?
bool IsCancellationRequested = false;private void button2_Click(object sender, EventArgs e){ThreadPool.QueueUserWorkItem(o => Count(1000000));Thread.Sleep(300);IsCancellationRequested = true;}void Count(Int32 countTo){Console.WriteLine("一個可取消的操作開始執行");for (int count = 0; count < countTo; count++){if (IsCancellationRequested){Console.WriteLine("一個可取消的操作被取消" + count.ToString());break;}Console.WriteLine(count.ToString());}}?
轉載于:https://www.cnblogs.com/wuhuisheng/p/5555563.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的C# 实现一个可取消的多线程操作 示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: codevs 1907 方格取数 3
- 下一篇: 解决iphone填写表单时,表单项获取焦