我有使用C#的WPF应用程序有后端。我希望它成为一个多线程的。
它有一个列出不同内容的组合框。用户可以异步选择它们。
假设组合框1包含1.ABC 2.BCD 3.CDE
用户选择ABC并在点击ABC之前点击BCD再次开始执行。
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 :(得分:3)
再次:您无法从创建它们的线程之外的任何其他线程访问UI控件。如果您希望这样做,则需要对Windows窗体使用Control.Invoke
或{ {1}}用于WPF。
在您的情况下,您的线程会尝试访问Dispatcher.Invoke
中所选项目的索引,这是一个无效的跨线程操作。将其移出您的线程方法,然后进行设置。