У меня есть простое приложение Windows Form, которое использует OpenFileDialog
и SaveFileDialog
. Форма имеет кнопку Close, которая при нажатии вызывает следующий код:
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;
}
После нажатия кнопки Close окно вывода отображает следующие три строки:
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.Close();
Environment.Exit(0);
this.Dispose()
- попробуйтеthis.Close()
.SaveFileDialog sfd = new SaveFileDialog();
в заявлении обusing
.