日期:2014-05-17  浏览次数:20792 次

急,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();
}

}