![](/img/trans.png)
[英]How I can access to menubar and sub ment on another application from my c# application?
[英]C# How can I send a break to another sub routine?
我有一個循環運行,將處理1000的記錄,目前一旦循環運行它無法停止,用戶必須等到它完成。 當有人點擊“取消”按鈕時,如何停止循環? 我如何打破其他常規?
謝謝
您可以在自己的線程中運行它並中止線程。 請注意,這可能會使操作處於不良狀態。
相反,您應該創建一個線程在安全點檢查的退出標志。 如果它被標記為退出,則線程將在它安全的情況下立即停止。
您只需使用BackgroundWorker組件即可。
它是基於事件的,非常容易使用。 看起來非常適合您所描述的內容。
它對取消信令以及進度報告也提供了很好的支持。
你可以在谷歌上查找很多代碼示例。
設置WorkerSupportsCancellation屬性,使其成立。
backgroundworker1.WorkerSupportsCancellation = true;
在你開始工作之前做它。
然后,在循環中,您可以輪詢CancellationPending屬性:
if (backgroundWorker1.CancellationPending) return;
舉個例子,你應該明白這個想法。
謝謝你的回復。 它是一個backgroundworker
但是當我使用backgroundworker1.cancelAsync();
我得到了例外:
“此BackgroundWorker聲明它不支持取消。修改WorkerSupportsCancellation以聲明它確實支持取消”
我該如何改變這個? 這是繼承的代碼,對不起!
正如馬克所說,你需要實施某種合作同步。 人們經常傾向於想在這里使用Thread.Abort ......但這是一個壞主意。
有很多問題可以解決這個問題,例如,參見:“ C#中是否有一個很好的方法可以在給定的線程上拋出異常。 ”
您可以添加一個設置布爾標志的取消按鈕
在循環內部在關鍵點添加“Application.DoEvents”,然后檢查布爾標志。 如果標志已被觸發,則執行清理並退出循環。
設置WorkerSupportsCancellation
你的財產BackgroundWorker
真:-)
您還必須檢查循環中的CancellationPending
屬性,看看是否應該中止處理。 chakrit鏈接的MSDN文章有一個很好的示例代碼塊
編輯:D'哦,你讓我在幾秒鍾內有chakrit :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.