我有兩個線程看起來像這樣的主題accesing .NET控件問題
pbDB_running = true; // start progress bar
Thread connectDb = new Thread(new ThreadStart(ConnectToDb));
Thread runProgress = new Thread(new ThreadStart(RunpbDB));
connectDb.Start();
runProgress.Start();
connectDb.Join(); //wait untill the connection is done
pbDB_running = false; //stop the progress bar
正如你可能會猜到,ConnectToDb是用來做與數據庫的連接,而runpbDB正在一個進度條跑在界面上。進度條(pbDB)是通過在設計視圖上拖放創建的Windows.Forms控件。 的runProgress線程運行RunpbDB()至極看起來是這樣的:
private void RunpbDB()
{
while (pbDB_running)
{
if (pbDB.Value == 100) pbDB.Value = 0;
else pbDB.Value += 1;
}
pbDB.Value = 0;
}
當兩個線程開始我進去RunpbDB()以下異常:
Cross-thread operation not valid: Control 'pbDB' accessed from a thread other than the thread it was created on.
我能做些什麼來解決這個情況?
BackgroundWorker在這裏不起作用,因爲peter想要在UI線程上顯示進度。 – ZafarYousafi 2013-03-23 14:52:00
@ZafarYousafi BackgroundWorker對於Peter想要實現的功能會很好。是的,在目前的形式中,使用全局的'pbDB_running'將不起作用,但要重新編寫代碼以適應後臺工作,Peter可以實現他想要的。 – 2013-03-23 14:57:19
非常感謝,我會用BackgroundWorker – peter 2013-03-23 15:08:21