-1

我有 C# 的 WPF 应用程序有后端。我希望使它成为一个多线程的。

它有一个组合框列出不同的东西。用户可以异步选择它们。

假设组合框 1 包含 1.ABC 2.BCD 3.CDE

用户选择 ABC 并开始执行,如果他在单击 ABC 之前单击 BCD,它将再次开始执行。

像那样,我想要一个多线程的 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;





    }
4

1 回答 1

3

同样:您不能从创建它们的线程之外的任何其他线程访问 UI 控件。如果你想这样做,你需要使用Control.InvokeWindows 窗体或Dispatcher.InvokeWPF。

在您的情况下,您的线程尝试访问在 中选择的项目的索引ComboBox,这是无效的跨线程操作。把它从你的线程方法中移出,你就设置好了。

于 2012-05-07T08:05:21.220 回答