我有 ac#winforms 应用程序偶尔挂起,有人告诉我,我们应该确保我们没有在主 GUI 线程之外打开任何窗口。我启动了 Spy++ 并注意到当我们在客户端会话开始时打开 OpenFileDialog 时,该对话框存在于另一个线程上,即使代码路径正在主 GUI 线程上运行。
然后,在窗口关闭后,该窗口仍然在 Spy++ 中显示为在工作线程上。即使我们将 OpenFileDialog 的用法包含在 using 语句中,也会发生这种情况。所以看起来处理对话并没有真正摆脱窗口,这很奇怪。
这是实际的代码
if (filename == String.Empty)
{
using (var openFileDialog = new OpenFileDialog
{
Filter = string.Format(MessageStrings["DialogFormat"]),
Title = MessageStrings["OpenDialogTitle"]
})
{
if (openFileDialog.ShowDialog() != DialogResult.OK || openFileDialog.FileName == String.Empty)
return false;
filename = openFileDialog.FileName;
}
}