.net C# 跨越線程調用表單上的控制項一個完整的例子

來源:互聯網
上載者:User
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Drawing.Drawing2D;
using System.Threading;

namespace Test
...{
    public partial class Form1 : Form
    ...{
        public Form1()
        ...{
            InitializeComponent();
        }
        private Thread myThread;
        private void RunsOnWorkerThread()
        ...{



            for (int i = 0; i < 100; i++)
            ...{

                ShowProgress(Convert.ToString(i) + "%", i);

                Thread.Sleep(100);

            }

        }

        public void ShowProgress(string msg, int percentDone)
        ...{

            // Wrap the parameters in some EventArgs-derived custom class:

            System.EventArgs e = new MyProgressEvents(msg, percentDone);

            object[] pList = ...{ this, e };



            BeginInvoke(new MyProgressEventsHandler(UpdateUI), pList);

        }

        private delegate void MyProgressEventsHandler(object sender, MyProgressEvents e);

        private void UpdateUI(object sender, MyProgressEvents e)
        ...{

            this.label1.Text = e.Msg;

            this.progressBar1.Value = e.PercentDone;

        }

        public class MyProgressEvents : EventArgs
        ...{

            public string Msg;

            public int PercentDone;

            public MyProgressEvents(string msg, int per)
            ...{

                Msg = msg;

                PercentDone = per;

            }

        }

        //開始線程
        private void button1_Click(object sender, EventArgs e)
        ...{
            myThread = new Thread(new ThreadStart(RunsOnWorkerThread));
            myThread.Start();

        }




        private void button2_Click(object sender, EventArgs e)
        ...{
            if (myThread != null && myThread.IsAlive)
                myThread.Suspend();//線程掛起
            myThread.Priority = ThreadPriority.Lowest;
        }
        private void button3_Click(object sender, EventArgs e)
        ...{
            if (myThread != null && myThread.IsAlive)               
                myThread.Resume();//繼續線程
        }
        private void button4_Click(object sender, EventArgs e)
        ...{
            if (myThread != null && myThread.IsAlive)
                myThread.Abort();//線程終止
        }

    }
}

 參見://http://blog.csdn.net/chendazhi/archive/2006/05/09/715064.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.