2010-09-08 87 views
0

這裏是我的代碼的情況下,跨線程操作控制

在主線程創建面板(S)(基於一些配置),然後在基於文件類型(下一步如視頻, PPT,圖像...)我創建適當的控件(動態)以顯示在窗體上。

控件的創建將在單獨的線程中完成(針對每個文件)。創建控件後,當我嘗試將該控件添加到面板(主線程中創建的面板)時,它會引發錯誤,如cross thread violation, control was accessed from one thread other that it was created

有人可以幫我這方面嗎?

在這種情況下,一切 - 創建面板和控件 - 將是動態的。沒有什麼會是靜態的。

我嘗試了一些在StackOverflow上找到的文章(例如,control.BeginInvoke() ..等),但無法解決我的問題。

+0

Benjol,是的你是正確的,Control.invoke將是答案,但對我來說,我需要添加一個新的控制面板。但是這種方法會更新表單上已存在的控件。讓我知道,有沒有其他的方式來處理control.invoke()。 – 2010-09-08 12:59:40

回答

4

您不能在另一個線程中創建控件並將它們添加到在主UI線程中創建的窗體。 Windows要求頂級窗口擁有的子窗口屬於同一個線程。你在在UI線程中創建它們。利用Control.Begin/Invoke()方法。

+0

感謝您的回覆,但是我的實際問題是..說吧,在我的表單上我們有3個面板,第一個面板上顯示一些圖像集合,第二個面板中有一些視頻,第三個面板中顯示一些滾動文本。當第一個面板中的圖像發生變化時,滾動文本暫停(顛簸)一段時間。這是因爲所有3個控件和更改圖片框中圖像的計時器都是在同一個線程中創建的(即主線程)。 – 2010-09-08 12:50:55

+1

@N Chary:是*什麼*? – 2010-09-08 12:51:30

+0

檢查此線程以改善繪圖行爲的方法:http://stackoverflow.com/questions/2612487/how-to-fix-the-flickering-in-user-controls/2613272#2613272 – 2010-09-08 13:20:46

0

只能從主GUI線程創建和訪問控件。

您可以在其他線程中工作,但不能從其他線程訪問GUI組件。

相關問題