我有一個winform應用程序(一種形式),在這個窗體上有一個RichTextBox。在這個表單的構造函數中,我創建了類MyClass
的一個實例。在「Form_Load」中,我從MyClass
實例調用方法Initialisation
。BackgroundWorker - 跨線程操作無效
在表單構造
myClass = new MyClass(RichTextBox richTextBox);
在Form_Load
myClass.Initialisation();
在Initialisation
方法,在一個循環中,我讀了一些parmeters做其他的東西。爲了不凍結應用程序(因爲某些操作可能需要一段時間,幾秒鐘),我使用BackgroundWorker
。我像這樣使用它(見下面的代碼)。
當我執行,我得到這個錯誤:跨線程操作無效:控制「的RichTextBox」 從比它是在創建的線程以外的線程訪問。
你能告訴我怎麼解決這個問題嗎?工作完美的,當我不訪問richTextBox
public Class MyClass
{
static BackgroundWorker _bw;
public MyClass()
{
_bw = new BackgroundWorker
{
WorkerReportsProgress = true,
WorkerSupportsCancellation = true
};
_bw.DoWork += bw_DoWork;
_bw.ProgressChanged += bw_ProgressChanged;
_bw.RunWorkerCompleted += bw_RunWorkerCompleted;
}
static void bw_DoWork(object sender, DoWorkEventArgs e)
{
foreach (....)
{
if (....)
{
richtextBox.Text.AppendText("MyText");
}
}
e.Result = true;
}
static void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e){}
static void bw_ProgressChanged(object sender, ProgressChangedEventArgs e){}
}
This Works,thanks – mili 2014-08-27 00:47:59