线程访问窗体的控件方法

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Threading;
  9. namespace 线程访问窗体的控件
  10. {
  11.     public partial class Form1 : Form
  12.     {
  13.         private Service service; 
  14.         public Form1()
  15.         {
  16.             InitializeComponent();
  17.         }
  18.         private void button1_Click(object sender, EventArgs e)
  19.         {
  20.             service = new Service(listBox1);
  21.             progressBar1.Value = 20;
  22.             Thread s=new Thread(new ThreadStart(send));
  23.             s.Start();
  24.         }
  25.         private void send()
  26.         {
  27.             //listBox1.Items.Add("1111"); 
  28.             service.AddListBoxItem("1111");
  29.             progressBar1.Value = 50; 
  30.         }
  31.     }
  32.     class Service
  33.     {
  34.         private ListBox listbox;
  35.         //用于操作另一个线程的控件
  36.         private delegate void AddListBoxItemCallback(string str);
  37.         private AddListBoxItemCallback addListBoxItemCallback;
  38.         public Service(ListBox listbox)
  39.         {
  40.             this.listbox = listbox;
  41.             addListBoxItemCallback = new AddListBoxItemCallback(AddListBoxItem);
  42.         }
  43.         public void AddListBoxItem(string str)
  44.         {
  45.             //比较调用AddListBoxItem方法的线程和创建listBox的线程是否同一个线程
  46.             //如果不是,则listBox的InvokeRequired为true
  47.             if (listbox.InvokeRequired == true)
  48.             {
  49.                 //用委托执行AddListBoxItem方法,
  50.                 //listbox.Invoke会导致listbox.InvokeRequired返回false
  51.                 //所以委托调用该方法时执行的是else中的内容
  52.                 listbox.Invoke(addListBoxItemCallback, str);
  53.             }
  54.             else
  55.             {
  56.                 //包含listbox的窗体关闭时会导致listbox.IsDisposed返回true
  57.                 if (listbox.IsDisposed == false)
  58.                 {
  59.                     listbox.Items.Add(str);
  60.                     listbox.SelectedIndex = listbox.Items.Count - 1;
  61.                     listbox.ClearSelected();
  62.                 }
  63.             }
  64.         }
  65.     }
  66. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值