c#如何線上程中通過傳遞訊息更新介面

來源:互聯網
上載者:User
2008-05-11 09:19
如何線上程中通過傳遞訊息更新介面
2007-10-08 16:45:30
建立win應用程式項目:testthread,把Form1.cs改名mainForm.cs,同時修改類名和main裡的類名。

2、 在項目中添加一個類:SubThread,用來管理子線程及線程處理。代碼如下:注釋很清楚的using System;using System.Collections.Generic;using System.Text;namespace testthread{    //定義一個代理參數類,用以傳遞資訊,可以根據自己的需要添加屬性    public class MessageEventArgs : EventArgs    {        public String Message; //傳遞遼符串資訊        public MessageEventArgs(string message)        {            this.Message = message;        }    }    class SubThread    {        /*定義代理         * 名稱MessageEventHandler;         * 參數         *    object 是寄件者         *    MessageEventArgs 發送的資訊         * */        public delegate void MessageEventHandler(object sender, MessageEventArgs e);        //定義事件        public event MessageEventHandler MessageSend;        /*         * 說明:定義事件處理函數,當然這裡也可以不用直接在引發事件時調用this.MessageSend(sender, e);         * 這裡的參數要和事件代理的參數一樣         * */        public void OnMessageSend(object sender, MessageEventArgs e)        {            if (MessageSend != null)                this.MessageSend(sender, e);        }        //定義一個線程        public System.Threading.Thread sendthread;        /*線程處理函數         * 說明:每毫秒向主介面發送一次資訊         * */        public void Sendding()        {            try            {                while (true)                {                    System.Threading.Thread.Sleep(200);                    this.OnMessageSend(this, new MessageEventArgs(DateTime.Now.ToString()));                }            }            catch            {            }        }        //開始線程函數        public void StartSend()        {            sendthread = new System.Threading.Thread(new System.Threading.ThreadStart(Sendding));            sendthread.Start();        }        //結束線程函數        public void EndSend()        {            sendthread.Abort();        }    }}3、   在主表單上添加兩個按鈕,一個開始一個結束,再添加一個ListBox用來顯示資訊,看看主介面程式中是怎樣調用處理的,有注釋不再多說:   using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Threading;namespace testthread{    public partial class mainForm : Form    {        SubThread _subthread;//定義一個線程        /*定義一代理         * 說明:其執行個體作為Invoke參數,以實現後台線程調用主線的函數         * MessageEventArgs傳遞顯示的資訊.         * */        public delegate void MessageHandler(MessageEventArgs e);        public mainForm()        {            InitializeComponent();        }        private void mainForm_Load(object sender, EventArgs e)        {            this._subthread = new SubThread();            //添加後台線程的訊息處理實現函數,            this._subthread.MessageSend += new SubThread.MessageEventHandler(this._subthread_MessageSend);        }        public void Message(MessageEventArgs e)        {            listBox1.Items.Add( e.Message);        }        /*說明:通過代理,訊息事件,實際就是實現在後台線程調用本函數,以前就說了在後台線程中不能直接把訊息發送到主線程,         * 那麼就要用到Invoke,關於怎麼用不再多說         * 參數要和MessageEventArgs代理的參數一至         * **/        private void _subthread_MessageSend(object sender, MessageEventArgs e)        {            //執行個體化代理            MessageHandler handler = new MessageHandler(Message);            //調用Invoke            this.Invoke(handler, new object[] { e });        }        private void button1_Click(object sender, EventArgs e)        {            this._subthread.StartSend();            this.listBox1.Items.Add("開始....");        }        private void button2_Click(object sender, EventArgs e)        {            this._subthread.EndSend();            this.listBox1.Items.Add("停止");        }    }}

去噹噹網買書,價格更低,送貨上門。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.