C# - 在相同的表单/选项卡中打开OpenFileDialog

时间:2017-10-26 21:20:11

标签: c# openfiledialog

当我运行.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作为一种解决方法。

1 个答案:

答案 0 :(得分:0)

最后,我的解决方法是使用来自" ActiveForm"的方法调用。并且在ofd.ShowDialog()方法中它有一个参数来添加Form / Handle,所以我将它改为ofd.ShowDialog(ActiveForm)并且它工作得很好。