为什么form.showdialog()工作,form.show()不在下面的代码中

时间:2012-09-14 04:26:10

标签: c#-4.0

在下面的一段代码中,我有一个观察者,看看文件是否已经改变,如果它已经改变,我在表单上显示更改的信息,但是如果我使用form.Show(),它会冻结但是form.showDialog( )工作正常,这两者之间有什么区别以及如何确定使用哪一个

    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;
        }
    }

1 个答案:

答案 0 :(得分:2)

ShowDialog暂停程序流,直到关闭表单,而Show显示表单并继续执行程序流程。

Form.ShowDialog - MSDN

  

您可以使用此方法在您的中显示模式对话框   应用。调用此方法时,后面的代码不是   执行直到对话框关闭后。

问题在于using阻止。 ShowDialog方法阻止程序流,直到窗体关闭,因为使用块不会终止。另一方面,Show立即将控制权返回到下一行,并且由于您在使用块内创建了表单对象,因此它不会在块外部显示。这就是为什么你的表格卡住了。