最近碰到线程间操作无效,从不是创建空间的线程访问的解决方法的问题,我在Google上找到了原因,原来是在微软的vs2005引入了线程安全的概念,防止滥用线程从而导致找错误的效率降低以及系统的复杂度大大的增加。
方法一:初始化时更改属性System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; 但是使用第三方控件很可能会出现问题。也不是微软提出线程安全概念的初衷。
方法二:设置匿名代理,设置如下:
private void Form1_Load(object sender, EventArgs e)
{
Thread t1, t2;
t1 = new Thread(new ThreadStart(BackgroundProcess));
t1.Start();
}
/// <summary>
/// 定义一个代理
/// </summary>
private delegate void dd();
private void BackgroundProcess()
{
// 将代理实例化为一个匿名代理
dd = delegate()
{
int i = 1;
while (true)
{
listBox1.Items.Add("Iterations: " + i.ToString());
i++;
Thread.Sleep(2000); }
};
listBox1.Invoke(dd);
}