public static class Common
    {
        //委托方法
        public delegate void uiDelegate();        public static void UIInvoke(this Control col, uiDelegate del)
        {
            if (col.InvokeRequired)
            {
                col.Invoke(del);
            }
            else
            {
                del();
            }
        }
    }

解决方案 »

  1.   

    基本上,我们只用 BeginInvoke 而不用 Invoke。并且不管是否需要判断 InvokeRequired,都调用 BeginInvoke。
      

  2.   

    顺便说一下,其实你定义 uiDelegate 有点多余。使用 Action 比较标准。
      

  3.   

    无论 col.InvokeRequired 为真、为假
    col.Invoke(del); 都不会有问题
    所以倒过来写才是合理的
                if (! col.InvokeRequired)
                {
                    del();
                }
                else
                {
                    col.Invoke(del);
                }