2012-05-07 66 views
-1

我有WPF應用程序與C#有後端。我希望使它成爲多線程的。線程在WPF應用程序

它有一個組合框列出不同的東西。用戶可以選擇它們異步。

假設組合-BOX1包含1.ABC 2.BCD 3.CDE

用戶選擇ABC並開始,如果他點擊BCD執行並再次點擊ABC之前..

Likethat,我想要一個多線程的WPF應用程序。

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     System.Windows.Forms.MessageBox.Show("Executing " + newList[ comboBox1.SelectedIndex] + " test case"); 


     this.IsEnabled = false; 


     Thread objThread = new Thread(() => 
     { 
      Process p = new Process(); 
      p.StartInfo.WorkingDirectory = listofDirs[comboBox1.SelectedIndex] + "\\" + newList[comboBox1.SelectedIndex] + "\\" + @"\bin\Release"; 
      p.StartInfo.FileName = listofDirs[comboBox1.SelectedIndex] + "\\" + newList[comboBox1.SelectedIndex] + "\\" + @"\bin\Release" + "\\" + newList[comboBox1.SelectedIndex] + ".exe"; 
      p.StartInfo.CreateNoWindow = false; 
      p.StartInfo.WindowStyle = ProcessWindowStyle.Maximized; 
      p.Start(); 
      p.WaitForExit(); 
     }); 


     objThread.IsBackground = true; 

     objThread.Priority = ThreadPriority.AboveNormal; 

     objThread.Start(); 


     this.IsEnabled = true; 





    } 
+0

什麼是你的問題? – Matten

+0

我想知道我們如何做到這一點?上面的代碼會導致一些運行時錯誤 –

+1

也許你應該告訴我們你的錯誤或你遇到了什麼問題? – Jaapjan

回答

3

還是那句話:您不能從任何其他線程比創建它們的線程訪問UI控件。如果你想這樣做,你需要使用Windows Forms的Control.Invoke或WPF的Dispatcher.Invoke

在你的情況下,你的線程試圖訪問在ComboBox中選擇的項目的索引,這是一個無效的跨線程操作。將其移出線程方法,然後設置。

+1

這個「我從另一個線程訪問控件並得到一個異常」的事情變老了......我們不能有一個博客這個答案每次問題被標記爲「wpf」和「多線程」? –