簡體   English   中英

什么是實現“停止/取消”按鈕以停止線程的好方法(不是后台工作者)

[英]What's a good way to implement a “stop/cancel” button to stop a thread (that ins't a background worker)

我有一個WPF應用程序,它與遠程服務器進行了大量交談,因此為了保持UI的美觀和響應速度,我將這些操作放在第二個線程中。 在少數情況下,該線程可能會掛起,從而永遠阻塞,盡管可能性很小。 有沒有一種簡單的方法可以實現不涉及調用thread.Abort()的“取消”按鈕? 我看到很多人建議不要使用它,並且我不想留下任何未發布的資源。 也許是一種強制線程引發異常的方法?

我在標題中指定這不是后台工作者,因為該程序不使用那些。 它已經用普通的舊線程進行了編碼。

我絕對同意您需要修復已損壞問題的評論,因為這是真正的問題,但是如果您目前無法解決,則需要繼續操作。 如果您使用的是.Net 4.0,請使用任務庫。 您可以創建一個任務,並向其傳遞一個將在其他線程上執行的操作。 關鍵是您可以將取消令牌傳遞給該任務。

http://msdn.microsoft.com/zh-CN/library/dd997396.aspx

如果您一遍又一遍地執行相同的操作,則還可以檢查任務狀態並執行相應的操作。

//this is just a sample
 if (myTask != null) //meaning it's still exe'ing your action
{
    if (myTask.Status == TaskStatus.Faulted) //there's some kind of a problem with exe'ing it
    myTask = null; // could reset to run the action again
    else
        return; //let the task finish
}

myTask = Task.Factory.StartNew (() =>
        {
            ExecuteUMyAction ();
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM