c#判斷代碼是否執(zhí)行超時的幾種方式總結
更新時間:2023年01月24日 14:22:33 作者:以有崖求無崖
這篇文章主要介紹了c#判斷代碼是否執(zhí)行超時的幾種方式總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
c#判斷代碼是否執(zhí)行超時
一、使用委托
delegate void dg(); dg dgCase; void method() { ? ? ?dgCase = () => ? ? ?{ ? ? ? ? ? Thread.Sleep(10000); ? ? ? ? ? MessageBox.Show("代碼執(zhí)行完畢!"); ? ? ?}; ? ? ?WaitHandle wh = dgCase.BeginInvoke(null, null).AsyncWaitHandle; ? ? ?if (!wh.WaitOne(3000)) ? ? ?{ ? ? ? ? ? MessageBox.Show("執(zhí)行已過了3秒!"); ? ? ?} ? ? ?return; }
二、使用Task
Task t = new Task(() => { ? ? ?Thread.Sleep(10000); ? ? ?MessageBox.Show("代碼執(zhí)行完畢!"); }); t.Start(); if(!t.Wait(3000)) { ? ? ?MessageBox.Show("執(zhí)行已過了3秒!"); } return;
三、使用Timer
void method() { ? ? ?System.Timers.Timer time = new System.Timers.Timer(3000) { Enabled = true }; ? ? ?time.Elapsed += (x, j) => ? ? ?{ ? ? ? ? ? MessageBox.Show("執(zhí)行已過了3秒!"); ? ? ? ? ? time.Stop(); ? ? ?}; ? ? ?Thread.Sleep(10000); ? ? ?MessageBox.Show("代碼執(zhí)行完畢!"); ? ? ?time.Stop(); ? ? ?return; }
四、使用Thread
void ThreadMethod() { ? ? ?Thread t = new Thread(()=> ? ? ?{ ? ? ? ? ? Thread.Sleep(10000); ? ? ? ? ? MessageBox.Show("代碼執(zhí)行完畢!"); ? ? ?}); ? ? ?t.Start(); ? ? ?bool isOver = t.Join(3000); ? ? ?if(!isOver) ? ? ?{ ? ? ? ? ? MessageBox.Show("執(zhí)行已過了3秒!"); ? ? ?} }
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
C#中DataSet,DataTable,DataView的區(qū)別與用法
這篇文章介紹了C#中DataSet,DataTable,DataView的區(qū)別與用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05Unity使用EzySlice實現(xiàn)模型多邊形順序切割
這篇文章主要為大家詳細介紹了Unity使用EzySlice實現(xiàn)模型多邊形順序切割,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-07-07