不要在先线程中访问UI,用Invoke调用
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx?pf=true
  
*****************************************************************************
http://feiyun0112.cnblogs.com/

解决方案 »

  1.   

    修改如下代码 依然不行  public static void InvokeIfNeeded<T>(this Control ctl, Action<T> act, T args)
            {
                if (ctl.InvokeRequired)
                {
                    ctl.Invoke(act, args);
                }
                else
                {
                    act(args);
                }
            }AlertLib.AlertForm f = new AlertLib.AlertForm();
                                            f.TopMost = true;                                        object[] args = {m.text, m.url, m.name, AlertLib.AlertForm.ShowWay.Fade, 300, 200, 200, 3000, 500};                                        f.InvokeIfNeeded(f.Show, args); // .InvokeIfNeeded(f.Show());
      

  2.   

    某个窗体或控件.Invoke(new Action(() => f.Show(result , "提示", AlertLib.AlertForm.ShowWay.Fade, 300, 200, 200, 3000, 500));
      

  3.   

    不要在线程创建Form实例,Invoke到UI再创建
      

  4.   


    我用 form.invoke  没问题, 为什么用control.invoke 有问题呢
      

  5.   


        /// <summary>
        /// 替代使用InvokeRequired
        /// </summary>
        static class ControlExtensions
        {
            public delegate void ActionShow();
            /// <summary>
            /// 从worker thread 调用UI Thread的控件的方法
            /// </summary>
            /// <param name="control"></param>
            /// <param name="code"></param>
            static public void UIThread(this Control control, ActionShow code)
            {
                if (control.InvokeRequired)
                {
                    control.BeginInvoke(code);
                    return;
                }
                code.Invoke();
            }
        }试试这个看看
      

  6.   

    线程间安全操作UI的前提是,对UI元素的操作都委托主线程,也就是UI线程来操作。
      

  7.   

    主线程 不要 Thread.Sleep(10000); 会没有响应的。