问一个跨线程访问控件的问题,很疑惑啊

adrianEvin 2013-05-30 11:30:25
public delegate void SetTextCallBack(string str);
private void BeginSetText(string str)
{
SetTextCallBack setTextCallBack = new SetTextCallBack(SetText);
setTextCallBack.BeginInvoke(str, EndSetText, setTextCallBack);
}
private void EndSetText(IAsyncResult ir)
{
SetTextCallBack callbacktemp = (SetTextCallBack)ir.AsyncState;
callbacktemp.EndInvoke(ir);
}
public void SetText(string str)
{
ListViewItem lstViewItem = new ListViewItem();
lstViewItem.SubItems[0].Text = "lixin";
lstViewItem.SubItems.Add("192.168.1.1");
lstViewItem.SubItems.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//this.lv_users.Items.Add(lstViewItem);这句赋值不行
toolStripButton1.Text = str;//这句赋值可以通过
}

lv_users 为 listview 控件,不能赋值
toolStripButton1 为 toolStrip1 控件,就可以赋值
都是控件,为什么有的可以赋值,有的不能赋值啊。
而且我是用了委托访问,为什么listview还是无法赋值??
...全文
147 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xggllc 2013-05-30
  • 打赏
  • 举报
回复
跨线程访问控件是蛮麻烦的,我以前遇到类似的操作,我就是用定时器来实现的。
我要坚强 2013-05-30
  • 打赏
  • 举报
回复
因为不能跨线程操作,当前线程不方便操作主线程创建的控件。我要看一下某人的女儿有没有偷我的钱并放在隐私的地方,但我不方便,我就委托生她下来的母亲把他脱光了帮我看看。不过前提他妈妈不会护短啊。你正好是你不方便看,你找了个流氓帮你去脱光那个女娃,你一样是犯法的哇
syx151 2013-05-30
  • 打赏
  • 举报
回复
即使不在UI线程里直接操作UI控件,有时候也能成功的.但这不是安全的做法. 在别的线程里需要操作控件时,一律使用this.Invoke或者this.BeginInvoke就对了.
我要坚强 2013-05-30
  • 打赏
  • 举报
回复
同学两个概念问题,(可能我说的不一定正确,没有时间去百度一下跨线程问题) 而且我是用了委托访问,请问你委托谁去 SetText了,事实上你委托后台线程池里的线程去SetText了,主线程创建的控件怎么可以用后台线程去设置呢 第二个问题,跨线程不能访问的是什么是控件(Control)继承自Control的东西,而toolStripButton1是控件吗?他继承自Control吗?他是继承自Component。所以他可以跨线程访问
人生导师 2013-05-30
  • 打赏
  • 举报
回复
引用 10 楼 adrianEvin 的回复:
具体看了的我的是toolStrip1下的ToolStripButton。 ToolStripButton没有继承System.Windows.Form.Control这个类。 应该没有继承System.Windows.Form.Control这个类,可以跨线程赋值吧
如果你尝试的可以的就应该可以的,但是微软是不建议这么做的,因为这样是不安全的,你不知道后期会出现什么问题的,如果你写小程序玩玩还好,如果是大型项目开发中,应用程序运行的过程可能会因为这个出现很多奇怪的问题,所以在项目开发中不建议这样写代码
adrianEvin 2013-05-30
  • 打赏
  • 举报
回复
具体看了的我的是toolStrip1下的ToolStripButton。 ToolStripButton没有继承System.Windows.Form.Control这个类。 应该没有继承System.Windows.Form.Control这个类,可以跨线程赋值吧
adrianEvin 2013-05-30
  • 打赏
  • 举报
回复
引用 1 楼 u010383116 的回复:
同学两个概念问题,(可能我说的不一定正确,没有时间去百度一下跨线程问题)
而且我是用了委托访问,请问你委托谁去 SetText了,事实上你委托后台线程池里的线程去SetText了,主线程创建的控件怎么可以用后台线程去设置呢
第二个问题,跨线程不能访问的是什么是控件(Control)继承自Control的东西,而toolStripButton1是控件吗?他继承自Control吗?他是继承自Component。所以他可以跨线程访问

我通过8楼给的MSDN查看了
他们都有继承Control 和 Component 啊


这是个问题啊,有的控件可以跨线程,有的控件不行。
人生导师 2013-05-30
  • 打赏
  • 举报
回复
引用 7 楼 adrianEvin 的回复:
[quote=引用 1 楼 u010383116 的回复:] 同学两个概念问题,(可能我说的不一定正确,没有时间去百度一下跨线程问题) 而且我是用了委托访问,请问你委托谁去 SetText了,事实上你委托后台线程池里的线程去SetText了,主线程创建的控件怎么可以用后台线程去设置呢 第二个问题,跨线程不能访问的是什么是控件(Control)继承自Control的东西,而toolStripButton1是控件吗?他继承自Control吗?他是继承自Component。所以他可以跨线程访问
我以为只要是工具箱里面的都是控件额,怎么知道继承的是Control或者是Component 或者其他的啊[/quote] 从MSDN中就可以看出来的,如:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.toolstripbutton.aspx 页面上有继承关系
adrianEvin 2013-05-30
  • 打赏
  • 举报
回复
引用 1 楼 u010383116 的回复:
同学两个概念问题,(可能我说的不一定正确,没有时间去百度一下跨线程问题) 而且我是用了委托访问,请问你委托谁去 SetText了,事实上你委托后台线程池里的线程去SetText了,主线程创建的控件怎么可以用后台线程去设置呢 第二个问题,跨线程不能访问的是什么是控件(Control)继承自Control的东西,而toolStripButton1是控件吗?他继承自Control吗?他是继承自Component。所以他可以跨线程访问
我以为只要是工具箱里面的都是控件额,怎么知道继承的是Control或者是Component 或者其他的啊
adrianEvin 2013-05-30
  • 打赏
  • 举报
回复
引用 4 楼 xggllc 的回复:
跨线程访问控件是蛮麻烦的,我以前遇到类似的操作,我就是用定时器来实现的。
定时器 不算好方法
adrianEvin 2013-05-30
  • 打赏
  • 举报
回复
引用 1 楼 u010383116 的回复:
同学两个概念问题,(可能我说的不一定正确,没有时间去百度一下跨线程问题) 而且我是用了委托访问,请问你委托谁去 SetText了,事实上你委托后台线程池里的线程去SetText了,主线程创建的控件怎么可以用后台线程去设置呢 第二个问题,跨线程不能访问的是什么是控件(Control)继承自Control的东西,而toolStripButton1是控件吗?他继承自Control吗?他是继承自Component。所以他可以跨线程访问
嗯 大致明白了 不错

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧