子线程中操作控件

来源:百度文库 编辑:神马文学网 时间:2024/04/19 07:20:29
方式一:public partial class Form1 : Form
{
private delegate void FlushClient();//代理
public Form1()
{
       InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
      Thread thread = new Thread(CrossThreadFlush);
      thread.IsBackground = true;
      thread.Start();
}

private void CrossThreadFlush()
{
      while (true)
      {
            //将sleep和无限循环放在等待异步的外面
            Thread.Sleep(1000);
            ThreadFunction();
      }
}
private void ThreadFunction()
{
      if (this.textBox1.InvokeRequired)//等待异步
      {
            FlushClient fc = new FlushClient(ThreadFunction);
            this.Invoke(fc);//通过代理调用刷新方法
      }
      else
      {
            this.textBox1.Text = DateTime.Now.ToString();
      }
  }
}
此方法2.0及以上
方法二:
private void ControlThread()
{
            MethodInvoker TextBox1Show = new MethodInvoker(myControl);
            BeginInvoke(TextBox1Show);
}
private void myControl()
{
            textBox1.Text = "kdkkdkk2";
 }
方法三:this.Invoke((EventHandler)(delegate {}));