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)
}
你在异步编程中犯了#1罪.
你有一个繁忙的循环.而不是等待GlobalV.Attatched_Elements.Count改变,你不断地,不停地问"现在它是非零的吗?现在它是非零的吗?现在它是非零的吗?现在它是非零的吗?现在它是非零的吗?现在它是非零的吗?现在它是非零的吗?现在它是非零的吗?",就像CPU可以做到的那样快.
换句话说,你浪费了大量的执行时间.
您想要做的只是订阅一个事件,告诉您何时Count更改.然后,当它发生变化时,检查它是否为非零,并执行必要的处理.
| 归档时间: |
|
| 查看次数: |
814 次 |
| 最近记录: |