2014-10-01 2 views
1

У меня есть простое приложение Windows Form, которое использует OpenFileDialog и SaveFileDialog. Форма имеет кнопку Закрыть, при нажатии вызывает следующий код:Windows Form принимает длительное время для закрытия

private void closeButton_Click(object sender, EventArgs e) 
{ 
    this.Dispose(); 
} 

Если открыть форму, а затем нажмите кнопку Закрыть в отладке из Visual Studio 2010, форма закрывается, и я вернулся в режим редактирования практически сразу , Однако, если я открыл объекты OpenFileDialog или SaveFileDialog, а также либо выбрать файл, либо нажать «Отмена», а затем нажать «Закрыть», форма исчезает мгновенно, но для перехода в режим редактирования VS может потребоваться до 10 секунд.

Мой код для этих методов довольно прост:

private void saveDirectoryButton_Click(object sender, EventArgs e) 
{ 
    SaveFileDialog sfd = new SaveFileDialog(); 

    try 
    { 
     String path = Path.GetDirectoryName(settings.SavePath); 
     if (!String.IsNullOrEmpty(saveTextBox.Text)) 
      path = Path.GetDirectoryName(saveTextBox.Text); 
     sfd.InitialDirectory = path; 
     String name = Path.GetFileName(settings.SavePath); 
     if (!String.IsNullOrEmpty(saveTextBox.Text)) 
      path = Path.GetFileName(saveTextBox.Text); 
     sfd.FileName = name; 
    } 
    catch { /* Don't do anything */ } 

    sfd.Filter = "Data File|*.dat|All Files|*.*"; 
    DialogResult result = sfd.ShowDialog(); 
    if (result == DialogResult.OK) 
     saveTextBox.Text = sfd.FileName; 
} 

После удара Закрыть, то окно вывода отображает следующие три строки:

The thread 'vshost.RunParkingWindow' (0x1b8c) has exited with code 0 (0x0). 
The thread '<No Name>' (0x39c) has exited with code 0 (0x0). 
The program '[6052] LogScanner.vshost.exe: Managed (v2.0.50727)' has exited with code 0 (0x0). 

Первые два проявляющиеся сразу, а третий один появляется до того, как Visual Studio вернется в режим редактирования.

У кого-нибудь есть идея, почему так долго требуется вернуться в режим редактирования, если я открою один из этих диалогов?

+1

Возможно, не связаны: не вызывайте 'this.Dispose()' - попробуйте 'this.Close()' вместо этого. – Blorgbeard

+1

Также попробуйте обернуть 'SaveFileDialog sfd = new SaveFileDialog();' в инструкции 'using'. – Blorgbeard

+0

@Blorgbeard: Я изначально попробовал this.Close(), но имел те же результаты. Хорошее предложение для использования - я не уверен, почему я этого не делал, как обычно бывал, но, к сожалению, это не решило проблему. – Tim

ответ

0

Если вы хотите, чтобы закрыть одиночные окна формы, которую вы можете использовать:

this.Close();

Если вы хотите, чтобы закрыть всю программу, вы можете использовать:
Environment.Exit(0);

0 является только код выхода, это не важно.
Надеюсь, это поможет!

+0

OP говорит в комментариях, что он попробовал Close. – Blorgbeard

+0

хорошо, но как насчет Environment.Exit (0) ;? – mrphil2105

Смежные вопросы