• 多线程的多种写法实现


     int testFunc(string str)
            {
                MessageBox.Show(str);
                return 1;
            }

            void test()
            {
                this.lblMessage.Text = "111";
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                //ThreadPool.QueueUserWorkItem(new WaitCallback(x =>
                //{
                //    Func<string, int> func = new Func<string, int>(this.testFunc);
                //    this.Invoke(func, "fuck");
                //    this.Invoke(new Action(this.test));
                //    Thread.Sleep(5000);
                //    MessageBox.Show("YYYY");
                //}));

                //MessageBox.Show("XXXX");


                //DoWithEasy();
                //DoWithParameter();
                //DoWithTimer();
                //DoWithThreadPool();
                //DoWithThreadPoolParameter();
                //DoWithAnonymous();
                //DoWithLambda();
                //DoWithCommon();
                //DoWithAction();
                //DoWithFunc();
                //DoWithPredicate();
            }

            #region A simple Thread
            private void DoWithEasy()
            {
                Thread t = new Thread(new ThreadStart(this.DoSomethingWithEasy));
                t.Start();
            }
            private void DoSomethingWithEasy()
            {
                MessageBox.Show("Knights Warrior");
            }
            #endregion

            #region A simple Thread with parameter
            private void DoWithParameter()
            {
                Thread t = new Thread(new ParameterizedThreadStart(this.DoSomethingWithParameter));
                t.Start("Knights Warrior");
            }
            private void DoSomethingWithParameter(object x)
            {
                MessageBox.Show(x.ToString());
            }
            #endregion

            #region Thread with Timer
            public void DoWithTimer()
            {

                System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
                timer.Interval = 1000;
                timer.Tick += (x, y) =>
                {
                    MessageBox.Show("Knights Warrior");
                };
                timer.Start();
            }
            #endregion

            #region ThreadPool with no parameter
            private void DoWithThreadPool()
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(this.DoSomethingWithThreadPoolNO));
            }
            private void DoSomethingWithThreadPoolNO(object x)
            {
                MessageBox.Show("Knights Warrior");
            }
            #endregion

            #region ThreadPool with parameter
            private void DoWithThreadPoolParameter()
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(this.DoSomethingWithThreadPoolParameter), "Knights Warrior");
            }
            private void DoSomethingWithThreadPoolParameter(object x)
            {
                MessageBox.Show(x.ToString());
            }
            #endregion

            #region ThreadPool with Anonymous delegate
            private void DoWithAnonymous()
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object x)
                {
                    MessageBox.Show("Knights Warrior");
                }));
            }
            #endregion

            #region ThreadPool with lambda
            private void DoWithLambda()
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(x =>
                {
                    MessageBox.Show("Knights Warrior");
                }));
            }
            #endregion

            #region Thread change UI
            private void DoWithCommon()
            {
                WaitCallback waitCallBack = new WaitCallback(this.InvokeMethod);
                ThreadPool.QueueUserWorkItem(waitCallBack, "Knights Warrior");
            }

            private delegate void InvokeMethodDelegate(string name);
            private void InvokeMethod(object x)
            {
                this.Invoke(new InvokeMethodDelegate(this.ChangeUIWithCommon), x.ToString());
            }

            private void ChangeUIWithCommon(string name)
            {
                this.lblMessage.Text = name;
            }
            #endregion

            #region Thread change UI with Action
            private void DoWithAction()
            {
                WaitCallback waitCallback = new WaitCallback(this.DoSomethingWithAction);
                ThreadPool.QueueUserWorkItem(waitCallback, "Knights Warrior");
            }

            private void DoSomethingWithAction(object x)
            {
                this.Invoke(new Action<string>(this.ChangeUI), x.ToString());
            }

            private void ChangeUI(string message)
            {
                this.lblMessage.Text = message;
            }
            #endregion

            #region Thread change UI with Func
            private void DoWithFunc()
            {
                WaitCallback waitCallback = new WaitCallback(this.DoSomethingWithFunc);
                ThreadPool.QueueUserWorkItem(waitCallback, "Knights Warrior");
            }

            private void DoSomethingWithFunc(object x)
            {
                Func<string, int> f = new Func<string, int>(this.GetFuncMessage);
                object result = this.Invoke(f, x.ToString());
                MessageBox.Show(result.ToString());
            }

            private int GetFuncMessage(string message)
            {
                this.lblMessage.Text = message;
                if (message == "Knights Warrior")
                {
                    return 1;
                }
                else
                {
                    return 0;
                }
            }
            #endregion

            #region Thread change UI with Predicate
            private void DoWithPredicate()
            {
                WaitCallback waitCallback = new WaitCallback(this.DoSomethingWithPredicate);
                ThreadPool.QueueUserWorkItem(waitCallback, "Knights Warrior");
            }

            private void DoSomethingWithPredicate(object x)
            {
                Predicate<string> pd = new Predicate<string>(this.GetPredicateMessage);
                object result = this.Invoke(pd, x);
                MessageBox.Show(result.ToString());
            }

            private bool GetPredicateMessage(string message)
            {
                this.lblMessage.Text = message;
                if (message == "Knights Warrior")
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            #endregion

  • 相关阅读:
    jquery easy ui 1.3.4 事件与方法的使用(3)
    jquery easy ui 1.3.4 内容组件(2)
    jquery easy ui 1.3.4 快速入门(1)
    Asp.net MVC中提交集合对象,实现Model绑定(转载)
    Log4Net异常日志记录在asp.net mvc3.0的应用(转载)
    总结sqlserver数据库性能优化相关的注意事项
    企业级项目中最常用到的SQL
    .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法
    使用asp.net从零开始制作设计网站---转载
    .net学习之集合、foreach原理、Hashtable、Path类、File类、Directory类、文件流FileStream类、压缩流GZipStream、拷贝大文件、序列化和反序列化
  • 原文地址:https://www.cnblogs.com/lmule/p/1805408.html
Copyright © 2020-2023  润新知