2012-09-14 40 views
0

在下面的代碼我有一個觀察者,看起來如果文件已經改變,如果它改變了我的顯示更改後的信息在窗體上,但如果我使用form.Show()這個凍結,但form.showDialog()工作正常,就是這兩個,以及如何之差來確定使用哪一個爲什麼form.showdialog()的作品和form.show()沒有做下面的代碼

private void watcher_Changed(object sender, FileSystemEventArgs e) 
    { 
     _watcher.EnableRaisingEvents = false; 
     try 
     { 
      if (_displayPatientInfo != null) 
      { 
       _displayPatientInfo.Dispose(); 
      } 
      GetPatientInfo(e.FullPath); 
      using (StreamReader sr = new StreamReader(e.FullPath, Encoding.Default)) 
      { 
       String line; 
       line = sr.ReadToEnd(); 

       if (line.IndexOf("<IsPatientFixed>") > 0) 
       { 
        var value = GetTagValue(line, "<IsPatientFixed>", "</IsPatientFixed>"); 
        if (value == "true" || value == "True") 
        { 

         _displayPatientInfo = new frmPatientInfoDisplay(); 
         _displayPatientInfo.SetData(_patientInfo); 
         _displayPatientInfo.ShowDialog(); 

        } 
       } 
      } 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
     finally 
     { 
      _watcher.EnableRaisingEvents = true; 
     } 
    } 
+0

ShowDialog的代表模態窗口,顯示非模式。這可能有所幫助:http://msdn.microsoft.com/en-US/library/39wcs2dh(VS.80).aspx 對不起,錯誤的複製和粘貼。 –

+1

@PabloRomeo這是鏈接到我的問題只有 –

回答

4

正如@Habib說,當你調用的ShowDialog()不執行後這個代碼,直到您關閉該窗體和您的觀察者會卡住。

你的問題是觀察者運行在不同的線程上,然後你的主窗體,這就是爲什麼當你調用Show()時它會凍結你的應用程序,因爲它試圖訪問你的主線程擁有的內存部分。 要解決此問題,可以在要顯示或處理_displayPatientInfo表單時使用Invoke(Delegate)。

Control.Invoke Method (Delegate)

Executes the specified delegate on the thread that owns the control's underlying window handle. 
2

ShowDialog暫停程序流程,直到您關閉表格,而Show顯示錶格並繼續執行程序流程。

Form.ShowDialog - MSDN

您可以使用此方法在 應用程序中顯示一個模式對話框。當調用此方法時,緊隨其後的代碼不是 ,直到關閉對話框之後。

問題出在using區塊。 ShowDialog方法阻塞了程序流,直到窗體關閉,因爲使用塊不會終止。另一方面,Show立即將控件返回到下一行,並且由於您在使用塊內部創建了表單對象,因此它在塊之外將不可見。這就是爲什麼你讓你的表單卡住了。

+0

我擺脫了使用塊的測試,但問題依然是新形式form.show() –

+0

@PradeepSingh,真的不知道凍結相同,但它有做與程序流程,因爲這是兩個唯一的區別,一個停止執行,其他繼續流程。所以別的東西在你的代碼事情,一旦你繼續程序流程 – Habib

+0

它正常工作與ShowDialog的違揹你的解釋是沒有響應的形式 –

相關問題