1
A
回答
2
您可以通過使用計時器來完成此操作 - 將其設置爲您希望的超時時間,並在方法開始時啓動它。
在該方法的最後,禁用計時器 - 它只會在超時時觸發,並且可以掛鉤到tick事件。
var timer = new Timer(timeout);
timer.Elapsed = ElapsedEventHanler; // Name of the event handler
timer.Start();
// do long running process
timer.Stop();
我建議您閱讀了上different timer classes - 這會讓你知道哪個是最適合您的特定需求。
0
使用System.Threading.Timer:
System.Threading.Timer t;
int seconds = 0;
public void start() {
TimerCallback tcb = new TimerCallback(tick);
t = new System.Threading.Timer(tcb);
t.Change(0, 1000);
}
public void tick(object o)
{
seconds++;
if (seconds == 60)
{
// do something
}
}
0
如果您打算停止長時間運行的方法,那麼我想添加取消支持的方法將是一個更好的辦法而不是引發異常。
0
嘗試下文中,其具有的功能用於消除異常(如果該過程完成)並引發源線程上例外:
var targetThreadDispatcher = Dispatcher.CurrentDispatcher;
var tokenSource = new CancellationTokenSource();
var cancellationToken = tokenSource.Token;
Task.Factory.StartNew(() =>
{
var ct = cancellationToken;
// How long the process has to run
Task.Delay(TimeSpan.FromSeconds(5));
// Exit the thread if the process completed
ct.ThrowIfCancellationRequest();
// Throw exception to target thread
targetThreadDispatcher.Invoke(() =>
{
throw new MyExceptionClass();
}
}, cancellationToken);
RunProcess();
// Cancel the exception raising if the process was completed.
tokenSource.Cancel();
相關問題
- 1. 拋出異常或引發域事件?
- 2. 每秒拋出的.NET異常圖?
- 3. X秒後觸發事件
- 4. 秒錶拋出空異常
- 5. 錯誤處理:引發事件或手動拋出異常
- 6. foundation 5在angularjs指令中引發異常拋出異常
- 7. 爲什麼在.net 2.0中拋出null引用異常而不是無效的異常拋出異常(如:int)?
- 8. PDFBox拋出異常:空引用異常
- 9. .NET Net.pkcs11.dll拋出異常system.formatexception在objToken.TokenInfo
- 10. 類拋出異常 - 鼠標事件
- 11. C#.NET 2異常:外部組件拋出異常
- 12. 拋出異常後返回
- 13. 魔術異常拋出拋出異常
- 14. 拋出異常拋出異常
- 15. MySQL x Java - 引發異常
- 16. 捕捉異常,然後拋出/發送異常並繼續
- 17. AR_mailer拋出異常。郵件仍發送
- 18. 在numpy拋出異常邏輯索引
- 19. 拋出異常不拋出
- 20. .NET TcpClient連接不會拋出異常
- 21. .NET拋出自定義異常
- 22. Newtonsoft的Json .NET拋出異常
- 23. .NET 4.0拋出一個異常TypeInitialization
- 24. C#.Net SaxonApi拋出內存異常
- 25. .NET ComboBox.Items.Add(「測試值」)拋出異常
- 26. Chronicle Map在重啓後拋出異常
- 27. SharePoint,在模擬後拋出異常
- 28. C#在安裝後不拋出異常
- 29. 異常拋出異常
- 30. 拋出異常
使用[System.Timer](http://msdn.microsoft .com/en-us/library/system.timers.timer.aspx) – Habib
您是否嘗試過使用'Timer'?我只能認爲在您的方法運行的線程上不會引發異常。 – LukeHennerley
@Habib你認爲這個異常會發生在另一個線程上,因此該方法很可能會繼續嗎?不是那麼簡單,我不認爲? – LukeHennerley