C# - OpenFileDialog 以相同的方式打开 Form/Tab
C# - OpenFileDialog opening in the same Form/Tab
当我 运行 .ShowDialog() 时,它会 运行 并正常打开,除了它会在同一个 form/tab 而不是新的打开。当我单击任务栏中的应用程序图标时,这会导致出现问题,因为它只是打开表单,其中 OpenFileDialog 隐藏在应用程序和其他 windows 后面,导致应用程序基本上被冻结。
唯一的解决方法是慢慢关闭所有其他应用程序(最小化),然后我可以单击 OpenFileDialog 并继续操作。
string proxyFile = "";
Thread thread = new Thread(() =>
{
OpenFileDialog _ofd = new OpenFileDialog();
_ofd.Filter = "txt|*.txt";
using (OpenFileDialog ofd = _ofd)
if (ofd.ShowDialog() == DialogResult.OK && ofd.CheckFileExists)
{
proxyFile = ofd.FileName;
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join(); // Freeze until dialog is done, then it exits the thread and continues with the filepath.
MessageBox.Show(proxyFile);
我必须 运行 它在线程下,因为它不会在 STA 中执行(使用 CEFSharp JSCallback 执行)所以我必须使用线程作为解决方法。
最后我的修复是使用来自 "ActiveForm" 的方法调用,在 ofd.ShowDialog() 方法中它有一个参数来添加 Form/Handle,所以我改变了它到 ofd.ShowDialog(ActiveForm) 并且效果很好。
当我 运行 .ShowDialog() 时,它会 运行 并正常打开,除了它会在同一个 form/tab 而不是新的打开。当我单击任务栏中的应用程序图标时,这会导致出现问题,因为它只是打开表单,其中 OpenFileDialog 隐藏在应用程序和其他 windows 后面,导致应用程序基本上被冻结。
唯一的解决方法是慢慢关闭所有其他应用程序(最小化),然后我可以单击 OpenFileDialog 并继续操作。
string proxyFile = "";
Thread thread = new Thread(() =>
{
OpenFileDialog _ofd = new OpenFileDialog();
_ofd.Filter = "txt|*.txt";
using (OpenFileDialog ofd = _ofd)
if (ofd.ShowDialog() == DialogResult.OK && ofd.CheckFileExists)
{
proxyFile = ofd.FileName;
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join(); // Freeze until dialog is done, then it exits the thread and continues with the filepath.
MessageBox.Show(proxyFile);
我必须 运行 它在线程下,因为它不会在 STA 中执行(使用 CEFSharp JSCallback 执行)所以我必须使用线程作为解决方法。
最后我的修复是使用来自 "ActiveForm" 的方法调用,在 ofd.ShowDialog() 方法中它有一个参数来添加 Form/Handle,所以我改变了它到 ofd.ShowDialog(ActiveForm) 并且效果很好。