C#跨线程调用帮助类

    public delegate void CallBackMethod();

    public delegate void CallBackMethodWithParams(object o);

    /// <summary>

    /// 线程调用帮助类

    /// 例:ThreadUtil.BeginInvoke(new CallBackMethod(MyMethod));

    /// </summary>

    public static class ThreadUtil

    {

        public static void BeginInvoke(CallBackMethod d)

        {

            d.BeginInvoke(null, null);

        }

        public static void BeginInvoke(CallBackMethodWithParams d, object o)

        {

            d.BeginInvoke(o, null, null);

        }

        public static void Invoke(System.Windows.Forms.Control owner, CallBackMethod d)

        {

            if (owner.InvokeRequired)

            {

                owner.Invoke(d);

            }

            else

            {

                d();

            }

        }

        public static void Invoke(System.Windows.Forms.Control owner, CallBackMethodWithParams d, object o)

        {

            if (owner.InvokeRequired)

            {

                owner.Invoke(d, o);

            }

            else

            {

                d(o);

            }

        }

        public static void BeginInvoke(System.Windows.Forms.Control owner, CallBackMethod d)

        {

            if (owner.InvokeRequired)

            {

                owner.BeginInvoke(d);

            }

            else

            {

                d();

            }

        }

        public static void BeginInvoke(System.Windows.Forms.Control owner, CallBackMethodWithParams d, object o)

        {

            if (owner.InvokeRequired)

            {

                owner.BeginInvoke(d, o);

            }

            else

            {

                d(o);

            }

        }

        public static void BeginInvokeInUIThread(System.Windows.Forms.Control owner, CallBackMethod d)

        {

            BeginInvoke(callBackInUIThread, new object[] { owner, d });

        }

        public static void BeginInvokeInUIThread(System.Windows.Forms.Control owner, CallBackMethodWithParams d, object o)

        {

            BeginInvoke(callBackInUIThread, new object[] { owner, d, o });

        }

        private static void callBackInUIThread(object o)

        {

            System.Threading.Thread.Sleep(100);

            object[] args = (object[])o;

            System.Windows.Forms.Control owner = (System.Windows.Forms.Control)args[0];

            if (args.Length == 2)

            {

                CallBackMethod d = (CallBackMethod)args[1];

                BeginInvoke(owner, d);

            }

            if (args.Length == 3)

            {

                CallBackMethodWithParams d = (CallBackMethodWithParams)args[1];

                object obj = args[2];

                BeginInvoke(owner, d, obj);

            }

        }

    }

转载于:https://www.cnblogs.com/genelau/archive/2011/10/15/Thread_Helper.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值