WPF应用程序中的线程

时间:2012-05-07 06:38:06

标签: c# wpf multithreading

我有使用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;





    }

1 个答案:

答案 0 :(得分:3)

再次:您无法从创建它们的线程之外的任何其他线程访问UI控件。如果您希望这样做,则需要对Windows窗体使用Control.Invoke或{ {1}}用于WPF。

在您的情况下,您的线程会尝试访问Dispatcher.Invoke中所选项目的索引,这是一个无效的跨线程操作。将其移出您的线程方法,然后进行设置。