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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM