现在一个窗体A,开了一个线程line1
另有一个窗体B,和一个窗体C.
在A窗体的一个按钮click事件中写入下面的代码:private void button4_Click(object sender, EventArgs e)
{
Thread MyThreadOne = new Thread(new ThreadStart(mythreading));
MyThreadOne.Start();
B myformb=new B();
myformb.show();
this.hide();
}public void mythreading()
{
C mywait = new C();
mywait.Show();
}
执行button4_Click后,
B窗体出现了,但是C窗体却闪了一下就关闭了.如何才使C窗体不关呢?///这里主要是执行了"this.hide();"后关闭的.
以上的例子可能无意义,我只是想通过它了解线程的使用.希望高手指教.如何在执行
Thread MyThreadOne = new Thread(new ThreadStart(mythreading));
MyThreadOne.Start();
myformb.show();
this.hide();
后,C窗体也不关闭.
另有一个窗体B,和一个窗体C.
在A窗体的一个按钮click事件中写入下面的代码:private void button4_Click(object sender, EventArgs e)
{
Thread MyThreadOne = new Thread(new ThreadStart(mythreading));
MyThreadOne.Start();
B myformb=new B();
myformb.show();
this.hide();
}public void mythreading()
{
C mywait = new C();
mywait.Show();
}
执行button4_Click后,
B窗体出现了,但是C窗体却闪了一下就关闭了.如何才使C窗体不关呢?///这里主要是执行了"this.hide();"后关闭的.
以上的例子可能无意义,我只是想通过它了解线程的使用.希望高手指教.如何在执行
Thread MyThreadOne = new Thread(new ThreadStart(mythreading));
MyThreadOne.Start();
myformb.show();
this.hide();
后,C窗体也不关闭.
所以垃圾收集器回收了mywait对象导至C窗体关闭.lz可以这样试试:
private static object sync=new object();
private C mywait=null;
public void mythreading()
{
lock(sync) //这个是线程同步用的.
{
if (mywait==null)
mywait=new C();
mywait.Show();
}
}
private void button4_Click(object sender, EventArgs e)
{
B myformb=new B();
myformb.show();
this.hide();
Thread MyThreadOne = new Thread(new ThreadStart(mythreading));
MyThreadOne.Start();
}
看是什么情况
{
C mywait = new C();
Application.Run(mywait);
}
6楼正解! public void mythreading()
{
C mywait = new C();
Application.Run(mywait);
}
{
Thread MyThreadOne = new Thread(new ThreadStart(mythreading));
MyThreadOne.Start();
B myformb=new B();
myformb.show();
this.hide();
} private delegate void ShowEvent();
public void mythreading()
{
ShowEvent dd = delegate
{
C mywait = new C();
mywait.Show();
};
this.Invoke(dd);
} 用一个委托提升到当前线程
public void mythreading()
{
mywait = new C(); Application.Run(mywait);
} 窗口打开后,
执行
Thread MyThreadOne = new Thread(new ThreadStart(mythreading));
MyThreadOne.Start(); C窗体打开了.
但是我想关闭它.执行:
mywait.close();
出错.
线程间操作无效: 从不是创建控件“wait”的线程访问它。
protected override void WndProc(ref System.Windows.Forms.Message msg)
{
base.WndProc(ref msg);
switch(msg.Msg)
{
case 0x9000 :
C mywait = new C();
mywait.Show();
break;
default:
break;
}
}private void button4_Click(object sender, EventArgs e)
{
Thread MyThreadOne = new Thread(new ThreadStart(mythreading));
MyThreadOne.Start();
B myformb=new B();
myformb.show();
this.hide();
} public void mythreading()
{
Win32Api.SendMessage(this.Handle.ToInt32(), 0x9000, 0, 0);
}