2012-03-28 54 views
2

我的申请工作,在另一个线程,并从列表中后台线程的GUI描绘结果做背景填补这个名单线程在WPF 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; 
      } 
     } 
    } 

}

回答

1

的问题是,只要GlobalV.Attatched_Elements.Count是零,你的事件处理经过的while (true)无限循环。

我想GlobalV.Attatched_Elements.Count是在StartDrawing的某处设置的,但是你不能忙 - 等到这个值大于零。你或许应该删除整个if (GlobalV.isfinished == false)while (true)块,只需做到以下几点,这尤其是什么也不做,如果有什么可以做的事:

private void bt_single_next_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 
    if (GlobalV.Attached_Elements.Count > 0) 
    { 
     ... 
    } 
} 

可能与也lock荷兰国际集团的集合线程安全的访问:

private void bt_single_next_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 
    lock (GlobalV.Attached_Elements) 
    { 
     if (GlobalV.Attached_Elements.Count > 0) 
     { 
      ... 
     } 
    } 
} 
6

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

你有一个繁忙的循环。而不是等待GlobalV.Attatched_Elements.Count改变,你总是不停地问“现在非零?现在非零?现在非零?现在非零?现在非零?现在非零?现在非零“现在它不是零”,与CPU一样快。

换句话说,你浪费了很多执行时间。

想要要做的只是订阅一个事件,告诉你什么时候Count变化。然后,当它发生变化时,检查它是否非零,并执行必要的处理。

+1

[我们在那里吗?](http://tvtropes.org/pmwiki/pmwiki.php/Main/AreWeThereYet) – 2012-03-28 11:23:52

+0

请注意! Aaaahhh ..... – Puppy 2012-03-28 11:46:36