可以在主窗体里设置过程代理,然后在后台线程中invoke该过程!

解决方案 »

  1.   

    楼上说的就是这个
    http://www.microsoft.com/china/msdn/archives/library/dnforms/html/winforms08162002.asp
      

  2.   

    声名代理
    public delegate void DelegateShowMessage(string s);
    在窗体中指定代理
    public class frmMain : System.Windows.Forms.Form
    {
        public DelegateShowMessage frmShowMessage;
        //....
    }在线程中调用代理
    m_form.Invoke(m_form.frmShowMessage,new Object[] {strMessage});
      

  3.   

    cysoft(拉登~~美国人心中永远的痛) 说说是怎么一个危险法,fansenwei(绿茵萤火虫) 说的是MSDN里说的异步方法,我有找过相关文章,是有提过是UNSAFE方法.因为类型不对的话就会崩溃,但我的用途是类型确定的.fansenwei(绿茵萤火虫)
    如果我想在窗口中异步执行一个方法会不会好点
      

  4.   

    楼上说的在后台线程中向窗体SendMessage也是可以的,窗体截获自定义消息再做相应的处理。
    我提到的应该还是较安全的吧,至少我没有因为这个原因让程序死掉吧,呵呵。
    你的要求最好还是在线程内处理吧?
      

  5.   

    我现在找出的解决方式有2种:
    1.建一个长期的后台线程,用Invoke方式来调用主窗体上的过程来启动警报窗口
    2.直接在主窗体一用MethodInvoker方式来做不同步运行
    实际上2个都是用了Invoke,只是前者能方便地用System.Thtreading.Timer.这个对定时十分好用,后者的话只能用System.Windows.Form.Timer.这个东西让人很不舒服