好的,这是我想要实现的主要内容以及它正在做的事情的症状。
我有一个主窗口表单。在此表单上,用户可以单击一个按钮,该按钮将打开一个新的单独表单。此表单将有一个按钮,该按钮应显示FolderBrowserDialog。相反,它只是锁定form2并且从不显示任何内容。
这基本上是我处理表单等的代码。
这是我做了一些无趣的事情之后加载的第一种形式。
FORM1.cs
//do stuff
//In a button.click method I do the following
Application.Run(new Form2(myParameters1, 2, 3));
这是从第一种形式
调用的第二种形式FORM2.cs
//do more stuff with the parameters on load
//user clicks on a button
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.RootFolder = Environment.SpecialFolder.Desktop;
fbd.Description = "This is the browser dialog box";
if(fbd.ShowDialog() == DialogResult.OK)
{
//do stuff
}
}
单击按钮后,对话框不会显示,并且form2无法执行任何操作。
我也尝试过更改
fbd.ShowDialog()
要
fbd.ShowDialog(Form2.ActiveForm)
具有相同的结果。
任何帮助将不胜感激!如果您需要更多信息,请告诉我,我可以尝试尽我所能。
修改
我忘了提及(实际上完全忘记了)打开第二个表单的方法是一个单独的线程。
所以第一个表单启动一个线程,它打开第二个表单,它应该打开一个它不是的对话框。现在我认为它与线程有关..
答案 0 :(得分:1)
我已经弄清楚了我的问题。它最终导致Form1打开Form2的线程无法打开DialogBoxes,因为它完全独立于UI线程。
我最终使用该线程并完全消除了它解决了我的问题。对话框就像我想要的那样打开了。
谢谢大家的回复!他们确实帮我找出了一些我没能正确做到的事情。
答案 1 :(得分:1)
我有类似的问题。主GUI线程正在创建一个后台工作线程来写入数据库,但是当后台线程失败时,用于显示自定义控件对话框以保存异常文件。这个自定义对话框显示正确,但浏览按钮打开folderBrowserDialog以保存不会显示的异常文件。我的自定义控件会显示" Not Responding"在标题栏中。
我所做的不是直接调用Custom Control而是调用UI线程本身 像这样。
void DBThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
this.Invoke(new CrossThreadExceptionHandler(CatchInterThreadException), e.Error);
}
}