2011-05-17 46 views
1

我試圖做到這一點: 我有主要形式,當用戶點擊右上角的紅叉退出應用程序,它彈出一個進度條的形式顯示應用程序正在更新/保存信息。進度條窗體中的後臺工作完成後,它將關閉進度欄窗體並關閉主窗體。 我的問題是,它會關閉從第一主甚至沒有運行後臺工作。如何解決這個問題?我試圖使用e.cancel = true它只是給了我死循環。父窗體關閉調用子形式在其後臺工作

這裏是我的主要形式有:

private static void mainForm_FormClosing(object sender, FormClosingEventArgs e) 
     { 
UpdatingForm pbar = new UpdatingForm(); 


      pbar.Show(); 
} 
在我updatingform

public UpdatingForm() 
     { 
      InitializeComponent(); 

      bgWorker.RunWorkerAsync(); 
     } 

    private void bgWorker_DoWork(object sender, DoWorkEventArgs e) 
      { 
    .... 
    } 

private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
     { 

      this.Close(); 
      // Application.Exit(); 
     } 
+0

獲取進度條數,如果是100%做到,那麼其他人關閉它在形式上接近事件編寫必要的代碼 – Dotnet 2011-05-17 08:23:34

回答

1

設置e.Canceltrue是正確的。然而,一旦你的UpdatingForm關閉,Application.Exit()火災mainForm_FormClosing()事件再次,讓你獲得一個更UpdatingForm

private static bool isClosing = false; 
private static void mainForm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (!isClosing) 
    { 
     isClosing = true; 
     e.Cancel = true; 
     UpdatingForm pbar = new UpdatingForm(); 
     pbar.Show(); 
    } 
} 
+0

簡單的方法+1 – Saleh 2011-05-17 08:27:32

0

也許這代碼works.test它

private static void mainForm_FormClosing(object sender, FormClosingEventArgs e) 
     { 
UpdatingForm pbar = new UpdatingForm(); 


      pbar.Show(); 
while (pbar.Created) 
{ 
Application.DoEvents() 
} 
} 

private static void mainForm_FormClosing(object sender, FormClosingEventArgs e) 
     { 
UpdatingForm pbar = new UpdatingForm(); 


      pbar.Show(); 
while (! pbar.IsDisposed) 
{ 
Application.DoEvents() 
} 
} 
+0

是的,它的工作原理,感謝偉大的 – Kiddo 2011-05-17 23:28:11

相關問題