2011-09-22 26 views
0

我有一個GUI我必須導入一些文檔,但是當我使用背景工作者時,圖形用戶界面被掛起,這一定不會發生,因爲我正在使用背景工作者,爲什麼發生這種情況好心找到下面的代碼..儘管我使用的背景工作者的GUI仍然掛着...

void ImportNotes_ContextMenuStripItem_Click(object sender, EventArgs e) 
{ 
    if (!backgroundWorker_notesImport.IsBusy) 
    { 
     mainFrm.ProgressBar.Visible = true; 
     backgroundWorker_notesImport.RunWorkerAsync(); 
    } 
} 

private void backgroundWorker_notesImport_DoWork(object sender, DoWorkEventArgs e) 
{ 
    ImportNotes(); 
} 

private void backgroundWorker_notesImport_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    mainFrm.ProgressBar.Value = e.ProgressPercentage; 
} 

void ImportNotes() { } 
+1

更新進度欄的次數。如果你把進度條鉤出來,掛鉤是否會消失? –

+0

由GUI掛起,你的意思是窗口不會重畫,不能調整大小等?或者你的意思是進度條沒有更新? –

+0

此代碼不會掛起您的GU​​I。你必須排除重要的位(s) –

回答

0

是否ImportNotes()方法只是整個進口一大步?

如果是這樣,那麼你仍然沒有給UI做任何事情。該example from the MSDN表明它應該如何使用:

// This event handler is where the time-consuming work is done. 
    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     BackgroundWorker worker = sender as BackgroundWorker; 

     for (int i = 1; i <= 10; i++) 
     { 
      if (worker.CancellationPending == true) 
      { 
       e.Cancel = true; 
       break; 
      } 
      else 
      { 
       // Perform a time consuming operation and report progress. 
       System.Threading.Thread.Sleep(500); 
       worker.ReportProgress(i * 10); 
      } 
     } 
    } 

你需要有一個循環,允許一些處理(Sleep在這種情況下),並ReportProgress通話。

相關問題