2013-12-19 37 views
0

我想用下面這段代碼隱藏我在我的WPF所有圖片我目前有:WPF hidding圖像

Dim theImgs() As Controls.Image = {picNextTopic1, picNextTopic2, picNextTopic3, picNextTopic4, picNextTopic5, picNextTopic6, picNextTopic7, picNextTopic8, picNextTopic9, picNextTopic10, picNextTopic11, picNextTopic12, picNextTopic13, picNextTopic14, picNextTopic15, picNextTopic16} 

Dim intX As Integer = 0 

Do Until intX = theImgs.Length 
    Try 
     theImgs(intX).Visibility = Visibility.Hidden 
     intX += 1 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
Loop 

但是,當運行代碼時上面我得到這個錯誤:

的調用線程無法訪問此對象,因爲不同的線程擁有它

我該如何解決這個錯誤?

+1

最有可能無論是圖像在後臺線程創建,或者你想從後臺線程修改。作爲解決方案,使用'Dispatcher'而不是後臺線程來運行應用程序的主UI線程上的代碼。 – Rachel

+0

@Rachel介意示例? – StealthRT

+0

當然,看看[這個答案](http://stackoverflow.com/a/8759160/302677)。它用於更新非UI對象,但問題和解決方案仍然相同。 – Rachel

回答

1

變化:

theImgs(intX).Visibility = Visibility.Hidden; 

要:

C#

Application.Current.Dispatcher.Invoke(new Action(() => 
    { 
     theImgs[intX].Visibility = Visibility.Hidden; 
    }); 

VB

Application.Current.Dispatcher.Invoke(
    Function(){ 
     theImgs(intX).Visibility = Visibility.Hidden 
    } 
) 
+0

不能將其轉換成VB.net? – StealthRT

+0

我試過** Application.Current.Dispatcher.Invoke(函數(){theImgs(intX).Visibility = Visibility.Hidden})**但似乎沒有工作? – StealthRT

+0

而且我也試過** Application.Current.Dispatcher.Invoke(DispatcherPriority.Background,New Action(Function(){theImgs(intX).Visibility = Visibility.Hidden}))**,那也不起作用。 – StealthRT

0

嘗試鏈接here

下面的代碼應該很好地工作:

Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, _ 
New Action(Function() theImgs(intX).Visibility = Visibility.Hidden)) 
+0

我得到錯誤**對象引用未設置爲對象的實例** – StealthRT

+0

請嘗試以下代碼: Dispatcher di = Dispatcher。CurrentDispatcher; // InitlizeComponent();旁邊; 商店在類級別的變量迪 現在試着用 di.Invoke(DispatcherPriority.Background,_ 新動作(功能()theImgs(INTX).Visibility = Visibility.Hidden)) –