C#OpenFileDialog非模态可能

max*_*dbe 7 c# modal-dialog openfiledialog

是否可以创建/拥有非模态.net OpenFileDialog我在主对话框中有一个UI元素,总是需要用户按下.

gkr*_*ers 6

不,OpenFileDialogSaveFileDialog都是从FileDialog派生的,FileDialog本质上是模态的,所以(据我所知),没有办法创建其中任何一个的非模态版本.


Jos*_*hua 6

您可以创建一个线程并让线程托管OpenFileDialog.示例代码缺少任何类型的同步,但它可以工作.

public partial class Form1 : Form
{
    OFDThread ofdThread;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ofdThread = new OFDThread();
        ofdThread.Show();
    }
}

public class OFDThread
{
    private Thread t;
    private DialogResult result;

    public OFDThread()
    {
        t = new Thread(new ParameterizedThreadStart(ShowOFD));
        t.SetApartmentState(ApartmentState.STA);
    }

    public DialogResult DialogResult { get { return this.result; } }

    public void Show()
    {
        t.Start(this);
    }

    private void ShowOFD(object o)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        result = ofd.ShowDialog();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用此代码,您可以添加一些内容来触发UI线程中的事件(小心调用!)以了解它们何时完成.您可以通过访问对话框的结果

DialogResult a = ofdThread.DialogResult
Run Code Online (Sandbox Code Playgroud)

来自您的UI线程.