簡體   English   中英

C#BackgroundWorker跳過DoWork並直接進入RunWorkerCompleted

[英]C# BackgroundWorker skips DoWork and goes straight to RunWorkerCompleted

我是C#的新手,所以對我來說很容易!

到目前為止 - 我有一個控制台應用程序,它可以監聽客戶端連接並相應地回復客戶端。

我還有一個帶有按鈕和文本框的WPF表單。 該按鈕啟動一些代碼以作為BackgroundWorker連接到服務器,然后在將其附加到文本框的末尾之前等待響應。

這很好,一次。 有時兩次。 但隨后它一直在崩潰 - 事實證明DoWork塊根本沒有被調用,而是直接進入RunWorkerCompleted。 當然,.result是空白的,因此嘗試將其轉換為字符串失敗。

這是一個菜鳥的錯誤嗎? 我試過在互聯網上搜索各種說法,但沒有看到任何有用的東西......

這是到目前為止的代碼: http//pastebin.com/ZQvCFqxN - 有很多調試輸出來自我試圖弄清楚到底出了什么問題。

這是調試輸出的結果: http//pastebin.com/V412mppX

任何幫助非常感謝。 謝謝!

編輯:相關代碼后修復 (感謝下面的Patrick Quirk)是:

public void dorequest(string query)
{
    request = new BackgroundWorker();
    request.WorkerSupportsCancellation = true;
    request.WorkerReportsProgress = true;
    request.ProgressChanged += request_ProgressChanged;
    request.DoWork += request_DoWork;
    request.RunWorkerCompleted += request_RunWorkerCompleted; 
    request.RunWorkerAsync(query);
}

您在調用RunWorkerAsync后附加了DoWork處理程序。 翻轉周圍的那些應該修復它。

此外,將來請在您的問題中粘貼代碼,而不是使用外部網站。 並在可能的情況下提供最少量的代碼來證明問題。 使我們和可能遇到同樣問題的人更容易。

暫無
暫無

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

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