У меня есть простое приложение 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 вернется в режим редактирования.
У кого-нибудь есть идея, почему так долго требуется вернуться в режим редактирования, если я открою один из этих диалогов?
Возможно, не связаны: не вызывайте 'this.Dispose()' - попробуйте 'this.Close()' вместо этого. – Blorgbeard
Также попробуйте обернуть 'SaveFileDialog sfd = new SaveFileDialog();' в инструкции 'using'. – Blorgbeard
@Blorgbeard: Я изначально попробовал this.Close(), но имел те же результаты. Хорошее предложение для использования - я не уверен, почему я этого не делал, как обычно бывал, но, к сожалению, это не решило проблему. – Tim