读书人

急C#中多线程中窗体的操作,该怎么处理

发布时间: 2012-09-16 17:33:17 作者: rapoo

急,C#中多线程中窗体的操作
项目中遇到一个问题,一直没解决,球牛人[code=C#][/code]帮助。
在主窗口线程创建一窗口,并把其隐藏,然都的等待消息,在另外线程中把该窗口显示出,这怎样实现啊,有做过这方面的给点指点,告诉我从那方向下手查资料也行,我都查了一天了。。。
首先在窗体中重新定义了show和hide方法

C# code
 public void ThreadShow()        {            if (this.InvokeRequired)            {                MethodInvoker invoker = new MethodInvoker(this.Show);                this.Invoke(invoker, null);            }            else            {                this.Show();            }        }        public void ThreadHide()        {            if (this.InvokeRequired)            {                MethodInvoker invoker = new MethodInvoker(this.Hide);                this.Invoke(invoker, null);            }            else            {                this.Hide();            }        }

在主线程中创建该窗体
C# code
private void FormMain_Load(object sender, EventArgs e){            fingerIm = new FingerIm();            fingerIm.ThreadShow();            fingerIm.ThreadHide();}在另一线程中显示该窗体


C# code
fingerIm.ThreadShow();

但是程序运行的结果并不对,但不调试窗口出现了,但是一片白,窗口上的空间没有显示

[解决办法]
C# code
public void Show(){   if (InvokeRequired)    {           BegionInvoke(new Action(Show));}else{       form.Show();}}
[解决办法]
begininvoke啊 begininvoke 我楼上用的就是,提醒过的。。。
[解决办法]

[解决办法]
你这是属于子线程操作UI的范围,
建立你google一下跨线程操作控件的相关内容,会得到很多这方面的知识点,总的来说
.net实现这种操作,多数都采用下面这种方法,当然,还有很多其它的方法:

public void ShowMsgForm()
{
if (InvokeRequired)
{

BegionInvoke(new Action(Show));
}else
{
form.Show();
}

}


读书人网 >C#

热点推荐