当前位置:  开发笔记 > 编程语言 > 正文

C#OpenFileDialog非模态可能

如何解决《C#OpenFileDialog非模态可能》经验,为你挑选了2个好方法。

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



1> gkrogers..:

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



2> Joshua..:

您可以创建一个线程并让线程托管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();
    }
}

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

DialogResult a = ofdThread.DialogResult

来自您的UI线程.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有