• 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(); 
                }
            }
  • 相关阅读:
    【转】给ExtJS的Grid增加两行tbar
    AWK使用手册
    SED单行脚本快速参考(Unix 流编辑器)
    Linux的用户和用户组管理
    Linux下中文man帮助安装。
    关于TLBB 客户端UI界面修改几个定义了解
    正则表达式30分钟入门教程
    VimDiff技巧
    CentOS 更换网易源
    Mysql数据库搭建Linux
  • 原文地址:https://www.cnblogs.com/wugang/p/2934632.html
Copyright © 2020-2023  润新知