1.Form2 打开后马上就关闭了???为什么??
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Thread tr;
private void button1_Click(object sender, EventArgs e)
{
tr = new Thread(new ThreadStart(Do));
tr.IsBackground = true;
tr.Start();
}
private void Do()
{
Form2 f = new Form2();
f.Show();
}
}
Form2能够显示出来,说面没在后台运行。MessageBox是Form1的模式对话框,只能挡住Form1不能挡住Form2,被Form2
挡住也是正常。
Form2能够显示出来,说面没在后台运行??什么意思呢?为什么马上就关闭了?
2.MessageBox是Form1的模式对话框,只能挡住Form1不能挡住Form2,被Form2 挡住也是正常
能不能再解释清楚一点
谢谢了!!
@KeVinDurant:
1、如果你想让Form2显示出来,为什么要设置 tr.IsBackground = true呢?应该设为false吧;
2、MessageBox是Form1的模式对话框,对话框显示出来以后,会挡在Form1前面,除非你单机对话框上的按钮将其关闭,否则不能操作Form1;
3、MessageBox跟Form2没有关系。如果Form2出来的完,可能在屏幕的最前端,挡住屏幕上的所有东西,包括MessageBox;
4、为什么Form2会关闭,这个不能确定。如果前面三条都不能解决问题。你看看你的Form2是不是代码有问题。
@Luke Zhang: 我设置了 tr.IsBackground = false了,还是出来后马上关闭了。。你可以试试。。
f.ShowDialog(); 这句话的意思不是模式化显示form2么, 你换成f.Show(); 试试 应该就不会挡住message了
换成换成f.Show() 。。forms2出来后马上就消失了。。你可以试试!!!
form的显示最前端设置为false
??什么意思。怎么设置。请指教
private void Do()
{
this.Invoke(new MethodInvoker(delegate
{
Form2 f = new Form2();
f.Show();
}));
}
把调用的方法改成这样就可以了。因为窗体的线程与你创建的线程不是同一个。
我知道这样封送到了主线程。。但是为什么那样不行呢!?