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(); 
            }
        }

 

转载于:https://www.cnblogs.com/wugang/archive/2013/02/27/2934632.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值