zoukankan      html  css  js  c++  java
  • C# 多线程 与 委托

    简单的多线程:

            protected void Page_Load(object sender, EventArgs e)
            {
                ParameterizedThreadStart _ParameterizedThreadStart = new ParameterizedThreadStart(MyMethod);
                Thread t = new Thread(_ParameterizedThreadStart);
                object o = "sdfsf";
                t.Start(o);
            }
    
    
            private void MyMethod(object o)
            {
                //执行任务
    }

    使用委托的多线程:

    public partial class Demo : Form
        {
            public Demo()
            {
                InitializeComponent();
            }
    
            //定义委托
            delegate void MyDelegate(string str);
            //声明委托
            MyDelegate _MyDelegate;
            //声明线程
            private Thread t;
            private void Demo_Load(object sender, EventArgs e)
            {
                //给函数指定委托
                _MyDelegate = new MyDelegate(SetLblTxt);
            }
    
            //执行委托
            private void Run()
            {
                while (true)
                {
                    lblShow.Invoke(_MyDelegate, new object[] { Guid.NewGuid().ToString() });
                    Thread.Sleep(100);
                }
            }
    
            //设定lable的text
            private void SetLblTxt(string o)
            {
                this.lblShow.Text = o.ToString();
            }
    
            private void btnBegin_Click(object sender, EventArgs e)
            {
                t = new Thread(new ThreadStart(Run));
                t.Start();
            }
    
            private void Demo_FormClosing(object sender, FormClosingEventArgs e)
            {
                //终止线程
                if (t.IsAlive) 
                {
                    t.Abort(); 
                }
            }
        }

     有返回值的多线程:

    //定义委托
            delegate string MyDelegate(string str);
            //声明委托
            MyDelegate _MyDelegate;
            //声明线程
            private Thread t;
            private void Demo_Load(object sender, EventArgs e)
            {
                //给函数指定委托
                _MyDelegate = new MyDelegate(SetLblTxt);
            }
    
            //执行委托
            private void Run()
            {
                object o = new object();
                while (true)
                {
                    lock (lblShow)
                    {
                        //lblShow.Invoke(_MyDelegate, new object[] { Guid.NewGuid().ToString() }); //其实是同步调用
                        IAsyncResult result = lblShow.BeginInvoke(_MyDelegate, new object[] { Guid.NewGuid().ToString() }); //异步调用
                        MessageBox.Show(lblShow.EndInvoke(result).ToString());  //获得返回值
                        Thread.Sleep(1000);
                    }
                }
            }
    
            //设定lable的text
            private string SetLblTxt(string o)
            {
                this.lblShow.Text = o.ToString();
                return o.ToString();
            }
    
            private void btnBegin_Click(object sender, EventArgs e)
            {
                t = new Thread(new ThreadStart(Run));
                t.Start();
            }
    
            private void Demo_FormClosing(object sender, FormClosingEventArgs e)
            {
                //终止线程
                if (t == null) return;
                if (t.IsAlive) 
                {
                    t.Abort(); 
                }
            }
  • 相关阅读:
    Redis常见的应用场景解析
    技术知识和稳定的系统之间,可能还差这些?
    学会数据库读写分离、分表分库——用Mycat,这一篇就够了!
    程序员也是弱势群体?——从WePhone开发者事件说起
    系统日志管理那点事
    我的Markdown的利器——Markdown Here、有道云笔记、iPic
    推荐几本产品类的书
    华为云的API调用实践(python版本)
    阿里云 API调用实践(python语言)
    HA总结:AWS 网络连接
  • 原文地址:https://www.cnblogs.com/wugang/p/2934632.html
Copyright © 2011-2022 走看看