当我运行.ShowDialog()时,它将运行并打开正常,但它将以相同的表单/制表符而不是新表单打开。当我单击任务栏中的应用程序图标时,这会导致问题,只需打开隐藏在应用程序和其他窗口后面的OpenFileDialog的窗体,导致应用程序基本上被冻结。
唯一的解决方法是慢慢关闭所有其他应用程序(最小化),然后我可以单击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执行)所以我必须使用一个Thread作为一种解决方法。
答案 0 :(得分:0)
最后,我的解决方法是使用来自" ActiveForm"的方法调用。并且在ofd.ShowDialog()方法中它有一个参数来添加Form / Handle,所以我将它改为ofd.ShowDialog(ActiveForm)并且它工作得很好。