dlaczego form.showdialog () działa i form.show () nie występuje w następującym kodzie

W poniższym fragmencie kodu mam obserwatora, który wygląda, jeśli plik się zmienił i jeśli się zmienił, pokazuję zmienione informacje na formularzu, ale jeśli używam formularza.Show (), to zawiesza się, ale form.showDialog () działa poprawnie , jaka jest różnica między tymi dwoma i jak określić, którego użyć

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

questionAnswers(2)

yourAnswerToTheQuestion