c#异步委托代理的小例子
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 WindowsApplication4 { public partial class Form1 : Form { //声明代理类型 delegate void delegateTest(int p); //为代理类型创建新的实例 private delegateTest test=null; //为了不影响界面响应,需要新建一个线程 Thread th = null; public Form1() { InitializeComponent(); //为线程初始化 th = new Thread(new ThreadStart(run)); //初始化代理实例 test = new delegateTest(testD); } private void button1_Click(object sender, EventArgs e) { //方法通过调用线程开始 th.Start(); } /// <summary> /// 实际进行循环操作的函数 /// </summary> void run() { for (int i = 0; i <= 100; i++) { ///每次需要长时间处理的过程 Thread.Sleep(100); //调用代理的方法 this.Invoke(test, i); } } /// <summary> /// 处理界面元素显示进度 /// </summary> /// <param name="p"></param> void testD(int p) { //处理界面元素显示进度 progressBar1.Value = p; label1.Text = p+"%"; } private void stop_Click(object sender, EventArgs e) { th.Abort(); this.Invoke(test, 0); } } }
//或者直接设置 可以线程操作界面System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
———————————————————————————————————
浩瀚的天空,会有改变的希望,世界会不会变得更加好,选择在於我们的手上。