2015-10-23 63 views
-1

我有一個.cs文件的消息框,我想清除另一個.cs文件中的文本框,確定按鈕單擊。 我用調用線程不能訪問這個對象,因爲不同的線程擁有它有錯誤

System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke((Action)(() => 
{ 
     _upload._txtbxNotes.Text = ""; 
})); 

解決線程問題。但它不幫我還。它顯示了同樣的錯誤。 任何幫助表示讚賞。


更新:

你好,我也更新了我的代碼,但它不會改變文本框的值。它保持原樣。我有上傳屏幕progresssbar上多了一個線程。

這裏是我的代碼:FileUpload.cs

  if (String.Equals(objFileUploadResponse.responseCode, 102)) 
      { 
       // MessageBox.Show("File Uploaded Successfully"); 

       ipbup.ReportProgress(qpvsChunk); 
       DialogResult dialogResult = System.Windows.Forms.MessageBox.Show("File Uploaded", "", MessageBoxButtons.OK); 

       if (dialogResult == DialogResult.OK) 
       { 
        _upload.SetNotes(" ");                    
       } 
      } 
      else 
      { 
       System.Windows.MessageBox.Show("File Uploaded Failed"); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 

Upload.cs:

public void SetNotes(string note) 
{ 
    _txtbxNotes.Dispatcher.Invoke(() => 
    { 
     _txtbxNotes.Text = note; 
    }); 
} 
+0

請花點時間瞭解格式在這裏的工作原理。選擇代碼塊並使用'{}'按鈕。 –

+0

你將SetNotes()設置爲與「」「'不同的地方? –

+0

我在上傳屏幕中使用了SetNotes()。 –

回答

2

這可能是因爲你在另一個線程運行。當您在另一個線程上調用System.Windows.Threading.Dispatcher.CurrentDispatcher時,它將創建一個新的Dispatcher。但是你不想要一個新的調度員,你想使用'擁有'控制/窗口的Dispatcher

要解決此問題,您的控件/窗口具有Dispatcher屬性。 (它referes到它創建的調度程序)

你可以試試:

// use the Dispatcher from the _upload control. 
_upload._txtbxNotes.Dispatcher.Invoke(() => 
{ 
    _upload._txtbxNotes.Text = ""; 
})); 

一個「好」的形式給出可能是:你叫_upload類中創建一個方法(例如)_upload.SetNotes(string note);這樣你保持邏輯分離。今天你想要一個TextBox明天你可能想要一個Label。這樣只會造成你的上傳窗口/控件/類。

// for example: (pseudo) 

_upload.SetNotes(""); 


class UploadWindow 
{ 
    // ...... 

    public void SetNotes(string note) 
    { 
     _txtbxNotes.Dispatcher.Invoke(() => 
     { 
      _txtbxNotes.Text = note; 
     })); 
    } 

} 
+0

你好,我已經嘗試過這個解決方案,但它顯示錯誤在調用(行動)。爲什麼這個錯誤來了?任何幫助表示讚賞。提前感謝。 –

+0

你好Jeroen,請你檢查上面的代碼。 –

相關問題