2012-03-28 53 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