是否可以创建/拥有非模态.net OpenFileDialog我在主对话框中有一个UI元素,总是需要用户按下.
不,OpenFileDialog和SaveFileDialog都是从FileDialog派生的,FileDialog本质上是模态的,所以(据我所知),没有办法创建其中任何一个的非模态版本.
您可以创建一个线程并让线程托管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线程.