c#中如何跨线程调用windows窗体控件?
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; //线程操作引用的命名空间 namespace windowform线程操作 { public delegate void RunDele();//定义一个委托,没有参数 public partial class Form1 : Form { Thread thread; //造一个线程对象 public Form1() { InitializeComponent(); // Control.CheckForIllegalCrossThreadCalls = false; //告诉程序不要检查线程的安全性,比较省力,但会对程序造成不好影响 } bool isRun = true; //点击启动 private void button1_Click(object sender, EventArgs e) { thread = new Thread(new ThreadStart(Run)); thread.IsBackground = true; thread.Start(); //委托开始执行 /*& button1.Enabled = false; long i = 0; while (isRun) { listView1.Items.Insert(0,i.ToString()); i++; } isRun = true;*/ } private void button2_Click(object sender, EventArgs e) { isRun = false; button1.Enabled = true ; } long i = 0; void Run() { // button1.Enabled = false; while (isRun) { RunDele(); } isRun = true; } void RunDele() { if (listView1.InvokeRequired) { RunDele dr = new RunDele(RunDele); this.Invoke(dr); } else { listView1.Items.Insert(0, i.ToString()); i++; } } void Exit() { listView1.Items.Insert(0, i.ToString()); i++; } } }