社区
C#
帖子详情
C#如何在多线程里面访问窗体控件和更改控件的属性?在线结贴
mycsdn2008
2004-07-08 05:50:46
如题
请最好给我一段代码,谢谢
...全文
361
4
打赏
收藏
C#如何在多线程里面访问窗体控件和更改控件的属性?在线结贴
如题 请最好给我一段代码,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
roselu
2004-07-13
打赏
举报
回复
GZ
marvelstack
2004-07-08
打赏
举报
回复
晚上写的刚好也适合楼主的问题;
http://blog.csdn.net/zhzuo/archive/2004/07/08/37262.aspx
主要就是调用
Control.Invoke 方法
或异步调用
Control.BeginInvoke 方法
需要定义方法的委托
public delegate void PingCompletedHandler(object sender,PingEventArgs e);
//更新信息显示,Invoke异步调用
private void pingCommand_PingCompleted(object sender,PingEventArgs e)
{
this.listView1.BeginInvoke(new UpdateListViewHandler(MessageInfoShow),new object[]{e.PingResult});
}
//更新ListView
private void MessageInfoShow(string[,] pingResult)
{
this.listView1.Items.Insert(0,new ListViewItem(new string []{pingResult[0,0],pingResult[0,1]}));
if(this.listView1.Items.Count ==this.hostCount)
{
this.listView1.Refresh();
TimeSpan ts = (TimeSpan)(DateTime.Now-this.startTime);
this.labelTime.Text = "检测时间:"+ts.TotalSeconds.ToString()+"秒";
this.buttonPing.Enabled = true;
}
}
小贵子88
2004-07-08
打赏
举报
回复
public class Form1 : System.Windows.Forms.Form
{
private delegate void UpdateDelegate(string str);
private void button1_Click(object sender, System.EventArgs e)
{
Thread t = new Thread(new ThreadStart(DoTask));
t.Name = "测试";
t.Start();
}
private void DoTask()
{
string str = Thread.CurrentThread.Name;
UpdateDelegate eh = new UpdateDelegate(UpdateText);
this.textBox1.Invoke(eh,new object[]{str});
}
private void UpdateText(string args)
{
this.textBox1.AppendText(args);
}
}
}
我搜到的一段代码,试试吧
mycsdn2008
2004-07-08
打赏
举报
回复
up
跨线程进行Windows
窗体
控件
的
访问
访问
Windows
窗体
控件
本质上不是线程安全的。如果有两个或多个线程操作某一
控件
的状态,则可能会迫使该
控件
进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式
访问
控件
非常重要。 .NET Framework 有助于在以非线程安全方式
访问
控件
时检测到这一问题。在调试器中运行应用程序时,如果创建某
控件
的线程之外的其他线程试图调用该
控件
,则调试器会引发一个 InvalidOperationException,并提示消息:“从不是创建
控件
control name 的线程
访问
它。
跨线程
访问
Windows
窗体
控件
跨线程
访问
Windows
窗体
控件
,线程带多参数。 跨线程
访问
Windows
窗体
控件
,线程带多参数。
C#
Winform线程创建子
窗体
C#
Winform 利用线程延时创建子
窗体
并且可跨线程控制主
窗体
的
控件
VS2010 CLR 线程以委托方式
访问
窗体
控件
编译环境:VS2010 C+++ CLR;请使用
C#
的朋友不要下载,网上有很多例程。本来是一个很简单的程序,只是我也花了很长时间才搞出来的。程序很简单,在
窗体
上,只在说明委托方式
访问
控制的基本套路,在
窗体
上共有三个
控件
,一个文本框,一个安全
访问
按钮,一个非安全
访问
按钮;点击非安全
访问
按钮则启动线程直接
访问
窗体
上的文框,这里调试时会出错,点击非安全
访问
按钮则启动线程以委托函数的方式
访问
窗体
上的文框,不会出错。
浅谈
C#
跨线程调用
窗体
控件
(比如TextBox)引发的线程安全问题
如何:对 Windows
窗体
控件
进行线程安全调用
访问
Windows
窗体
控件
本质上不是线程安全的。 如果有两个或多个线程操作某一
控件
的状态,则可能会迫使该
控件
进入一种不一致的状态。 还可能会出现其他与线程相关的 Bug,例如争用情况和死锁。 确保以线程安全方式
访问
控件
非常重要。 在未使用 Invoke 方法的情况下,从不是创建某个
控件
的线程的其他线程调用该
控件
是不安全的。 以下非线程安全的调用的示例。 // This event handler creates a thread that calls a // Windows Forms control in an unsafe w
C#
110,535
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章