2012-11-14 73 views
0

嗨,我有一個我爲我的網站創建的程序,我試圖更新它,以便代碼的激烈部分將運行在單獨的線程中。新線程創建了幾個服裝控件,我需要將它們放在容器內作爲主GUI線程上的子控件,但是每當我運行代碼時,我都會收到此錯誤「調用線程無法訪問此對象,因爲不同的線程擁有它「。拋出此錯誤後的調試器突出顯示了[if(FileStack.Dispatcher.CheckAccess())]下的代碼部分每次我運行代碼並且程序試圖調用該控件時。 這裏是我的代碼如何調用服裝控件並將其添加到控件使用c#的兒童WPF

public delegate void ADDFiLEHandel(FileControlxaml File); 


public void ADDFiles(FileControlxaml File) 
     { 

      if (FileStack.Dispatcher.CheckAccess()) 
      { 
       FileStack.Children.Add(File); //this is the code that gets height-lighted by the debugger 
      } 
      else 
      { 
         FileStack.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new ADDFiLEHandel(ADDFiles), File); 

      } 

然後調用來自新的線程,我不得不設置線程的狀態STA,我做錯了什麼伊夫像這樣的調用花了幾個小時試圖讓這項工作。

public void createfilethread(object data) 
    { 
    FileControlxaml NewFile = new FileControlxaml(); 
    NewFile.Title = "Hellow World"; 
    ADDFiles(NewFile); 
    } 
+0

什麼是'FileStack'? – CodingGorilla

+1

FileStack是一個StackPanel控件 – FileStreamers

回答

1

你不能這樣做。當您在沒有關聯Dispatcher的線程中實例化DispatcherObject時,會創建一個新調度程序並將其關聯到該線程。您不能混合在不同線程中創建的不同UIElements。

爲什麼要在第二個線程中創建UIElements?這就是「UI線程」的意思。

重新思考你的方法。

+0

好的非常感謝你 – FileStreamers