1,错误的代码是:
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; namespace WindowsFormsApplication5 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private string blog = "http://www.chenjiliang.com/"; private void Form1_Load(object sender, EventArgs e) { new System.Threading.Thread(ShowTime).Start(); } private void ShowTime() { textBox1.Text = DateTime.Now.ToString(); } } }
会看到Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on.的错误
2,增加一个Public static 类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication5 { public static class ControlExtention { public delegate void InvokeHandler(); public static void SafeInvoke(this Control control, InvokeHandler handler) { if (control.InvokeRequired) { control.Invoke(handler); } else { handler(); } } } }
3,build
4,这样写就好啦
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; namespace WindowsFormsApplication5 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private string s = "http://www.chenjiliang.com/"; private void Form1_Load(object sender, EventArgs e) { new System.Threading.Thread(ShowTime).Start(); } private void ShowTime() { this.SafeInvoke(() => { textBox1.Text = DateTime.Now.ToString(); }); } } }