欢迎光临

木子屋

标题: 使用Invoke解决多线程间的控件访问出错

作者: dnawo

日期: 2009-02-20 12:19 AM

分类: Win编程

内容: 在一个WinForm界面上有一个按钮(button1)和一个文本框(textBox1)，在button1的点击事件处理程序中创建一个新的线程，并期望在新线程中更改textBox1的值，代码如下：
复制内容到剪贴板 程序代码/// <summary>
/// 按钮点击事件处理程序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
//创建新线程
Thread processorThread = null;
processorThread = new Thread(new ThreadStart(Done));
processorThread.IsBackground = true;
processorThread.SetApartmentState(ApartmentState.STA);
processorThread.Start();
}
/// <summary>
/// 更新textBox1值
/// </summary>
private void Done()
{
textBox1.Text = "www.mzwu.com";
}
运行程序点击按钮后出错，提示：线程间操作无效: 从不是创建控件“textBox1”的线程访问它。下边我们用Invoke解决这一问题：
复制内容到剪贴板 程序代码/// <summary>
/// 按钮点击事件处理程序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
//创建新线程
Thread processorThread = null;
processorThread = new Thread(new ThreadStart(Done));
processorThread.IsBackground = true;
processorThread.SetApartmentState(ApartmentState.STA);
processorThread.Start();
}
delegate void WriteInvoke(string msg);
private void Write(string msg)
{
textBox1.Text = msg;
}
/// <summary>
/// 更新textBox1值
/// </summary>
private void Done()
{
this.Invoke(new WriteInvoke(Write), new object[] { "www.mzwu.com" });
}
更新成功！

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.414 ms

返回

标题: 使用Invoke解决多线程间的控件访问出错

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.414 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.477 ms

返回