wpf GUI线程中的线程太慢

kar*_*tal 2 c# wpf multithreading

我的应用程序在另一个线程的后台工作,以及后台线程填充此列表的列表中的Gui绘制结果

在初始化中我做了后台线程,当我在Gui按下按钮时,这个线程开始工作; 然后我点击另一个按钮来读取结果,而后台线程工作但GUI响应结果非常慢.

是否有任何解决方案我希望我的结果更快地在GUI上显示?

我的代码:

Thread startdrawingthread = new Thread(StartDrawing);

public MainWindow()
{
    InitializeComponent();
}

private void bt_draw_Click(object sender, System.Windows.RoutedEventArgs e)
{
    if (ch_single.IsChecked == true || ch_entire.IsChecked == true)
    {
        currentMode = "";
        startdrawingthread.Start();
        //StartDrawing();
        real_area.DrawingArea.Children.Clear();
        real_area.DrawGrid(20);
    }
}

private void bt_single_next_Click(object sender, System.Windows.RoutedEventArgs e)
{
    if (GlobalV.isfinished == false)
    {
        while (true)
        {
            if (GlobalV.Attatched_Elements.Count > 0)
            {
                try
                {
                    real_area.DrawingArea.Children.Clear();
                    real_area.DrawGrid(20);
                    real_area.DrawElement(GlobalV.Attatched_Elements[i]);
                    i++;
                }
                catch
                {
                }
                break;
            }
        }
   }
Run Code Online (Sandbox Code Playgroud)

}

jal*_*alf 6

你在异步编程中犯了#1罪.

你有一个繁忙的循环.而不是等待GlobalV.Attatched_Elements.Count改变,你不断地,不停地问"现在它是非零的吗?现在它是非零的吗?现在它是非零的吗?现在它是非零的吗?现在它是非零的吗?现在它是非零的吗?现在它是非零的吗?现在它是非零的吗?",就像CPU可以做到的那样快.

换句话说,你浪费了大量的执行时间.

想要做的只是订阅一个事件,告诉您何时Count更改.然后,当它发生变化时,检查它是否为非零,并执行必要的处理.