▲▲▲线程中怎么弹出窗体
程序启动后,有一个一直运行的后台线程,线程检测远程数据库中是否有更新,有则缓冲到本地,我想缓冲一次成功后就弹出一个提示窗口,如MSN一样,但在线程中却怎么也弹不出来,不放到线程就肯定没问题,各位如果谁做过,给点提示或代码,非常感谢。
------解决方案--------------------线程不能直接修改其他窗体的控件,不知道是不是也不能显示窗体,我知道如何通过线程修改其他窗体控件的方法,你看看会不会对你有帮助,下面的代码是通过Delegate 回调函数修改窗体控件的代码,也许会有帮助,要回家了,今天不能帮你试试了,如果实在不行明天帮你看看,直接用邮件联系吧,tellyes_software@126.com 
 delegate  void SetTextCallback(string text);  
 private static SetTextCallback d;   
 private void setLabelText(string text) 
         { 
             if (this.label1.InvokeRequired) 
             { 
                 d = new SetTextCallback(setLabelText); 
                 this.Invoke(d, new object[] { text }); 
             } 
             else 
             { 
                 this.label1.Text = text; 
             } 
         }
------解决方案--------------------楼上说在线程里不可以直接修改主线程窗体中的控件,这种说法不完全正确的。 
 只要将窗体中的 CheckForIllegalCrossThreadCalls 属性设置为 false 就可以在其它线程中修改。 
 但是,在VS2005中,微软是不推荐使用这样的方式的,它在一定程度上使程序变得“不安全”。至于从其它线程访问窗体控件,楼上的用法是最好的。利用托管。 
 其实也可以利用事件,声明事件后,在线程中激活事件就可以了。 
 也许还有其它方法,我只知道这三种方法。哈哈。   
 可是LZ要问的似乎不是这个。 
 比如在线程中要打开想OpenFileDialog这样的窗口就不行,前几天做一个小东西的时候也遇到这样的问题,还没想到解决方法,大家知道的话发上来看一下。 
------解决方案--------------------写个委托,在线程里调用就可以了
------解决方案--------------------前面打错了,第四行: 
 “其它线程访问窗体控件,楼上的用法是最好的。利用托管。” 
 应该是“利用委托” 
 汗
------解决方案--------------------不是很懂,帮顶一下
------解决方案--------------------学习了...
------解决方案--------------------using System; 
 using System.Collections.Generic; 
 using System.ComponentModel;   
 using System.Drawing; 
 using System.Text; 
 using System.Windows.Forms; 
 using System.Threading;     
 namespace WindowsApplication1 
 { 
     public partial class Form1 : Form 
     { 
         public Form1() 
         { 
             InitializeComponent(); 
         }   
         private void Form1_Load(object sender, EventArgs e) 
         { 
             this.MsgEvent += new MsgEventHandler(Form1_MsgEvent); 
         }   
         void Form1_MsgEvent(string msg) 
         { 
             ShowMsg s = new ShowMsg(ShowWindow); 
             this.Invoke(s, new object[] { msg }); 
         }            
         private void button1_Click(object sender, EventArgs e) 
         { 
             Thread th = new Thread(new ThreadStart(process)); 
             th.Start(); 
         } 
         private void process() 
         { 
             while (true) 
             { 
                 MsgEvent( "test ");                
                 break; 
             } 
         }   
         public delegate void MsgEventHandler(string msg); 
         public event MsgEventHandler MsgEvent; 
         delegate void ShowMsg(string msg); 
         private void ShowWindow(string msg) 
         { 
             Form2 f = new Form2(); 
             f.Show(); 
         }   
     } 
 }