C# 多线程动态创建控件并访问由该线程创建的控件

czhk520 2014-09-01 10:06:56
RT
我在一个线程里面操作文件,有几个文件就创建几个线程。
我想在UI上动态的创建几个进度条控件。

怎么做? 想了半天想不到啥。。。

窝是菜鸟!

求各路大神指点一二
...全文
605 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cvsntjava 2014-09-09
  • 打赏
  • 举报
回复
引用 15 楼 czhk520 的回复:
[quote=引用 14 楼 cvsntjava 的回复:] [quote=引用 13 楼 czhk520 的回复:] [quote=引用 8 楼 cvsntjava 的回复:] 写个类,给每个要操作的文件赋一个id以分辨不同线程操作的文件。
我就是这样写的,就是传值过去的时候不知道错哪里了,报错是说: 参数不匹配[/quote] this.invoke(new object[]{...这里面你传递的是值类型的数据} ), 而 private void LableF5(object[] obj) { //之前最好加个判断 if(obj==null) { return; } foreach(int id in obj)//这里便利的时候应该还是遍历值类型 { } } [/quote] 哦 我那里是临时这样写的 写错了 我可以肯定传过来的是string不是其他的也可以肯定不是空 现在问题是 我这样写 传一个值不会错 但是多个就会错了 比如上面我截图的那个 传一个1不会错 传1、2就会报错了。。。[/quote] 这就真的爱莫能助了,等我有空自己写个demo试试看。
czhk520 2014-09-03
  • 打赏
  • 举报
回复
引用 14 楼 cvsntjava 的回复:
[quote=引用 13 楼 czhk520 的回复:] [quote=引用 8 楼 cvsntjava 的回复:] 写个类,给每个要操作的文件赋一个id以分辨不同线程操作的文件。
我就是这样写的,就是传值过去的时候不知道错哪里了,报错是说: 参数不匹配[/quote] this.invoke(new object[]{...这里面你传递的是值类型的数据} ), 而 private void LableF5(object[] obj) { //之前最好加个判断 if(obj==null) { return; } foreach(int id in obj)//这里便利的时候应该还是遍历值类型 { } } [/quote] 哦 我那里是临时这样写的 写错了 我可以肯定传过来的是string不是其他的也可以肯定不是空 现在问题是 我这样写 传一个值不会错 但是多个就会错了 比如上面我截图的那个 传一个1不会错 传1、2就会报错了。。。
cvsntjava 2014-09-03
  • 打赏
  • 举报
回复
引用 13 楼 czhk520 的回复:
[quote=引用 8 楼 cvsntjava 的回复:] 写个类,给每个要操作的文件赋一个id以分辨不同线程操作的文件。
我就是这样写的,就是传值过去的时候不知道错哪里了,报错是说: 参数不匹配[/quote] this.invoke(new object[]{...这里面你传递的是值类型的数据} ), 而 private void LableF5(object[] obj) { //之前最好加个判断 if(obj==null) { return; } foreach(int id in obj)//这里便利的时候应该还是遍历值类型 { } }
czhk520 2014-09-02
  • 打赏
  • 举报
回复
引用 8 楼 cvsntjava 的回复:
写个类,给每个要操作的文件赋一个id以分辨不同线程操作的文件。
我就是这样写的,就是传值过去的时候不知道错哪里了,报错是说: 参数不匹配
czhk520 2014-09-02
  • 打赏
  • 举报
回复
引用 9 楼 cvsntjava 的回复:
具体报了什么异常呢?还有你出异常的代码可以贴出来给大家帮你找问题。
这里是在线程中获取参数然后传递给一个委托: 这里是定义的委托接收值,这样写错了嘛? 谢谢大家了!
mjp1234airen4385 2014-09-02
  • 打赏
  • 举报
回复
说了好多了,就是这个托管或者委托。 托管会降低线程效率
xisimao 2014-09-02
  • 打赏
  • 举报
回复
让线程Invoke创建控件,其余事情可以在该线程中操作,Invoke只要时间短不影响的
cvsntjava 2014-09-02
  • 打赏
  • 举报
回复
具体报了什么异常呢?还有你出异常的代码可以贴出来给大家帮你找问题。
cvsntjava 2014-09-02
  • 打赏
  • 举报
回复
写个类,给每个要操作的文件赋一个id以分辨不同线程操作的文件。
czhk520 2014-09-01
  • 打赏
  • 举报
回复
参数计数不匹配。。。 蛋疼 我看了参数都是匹配的。。。 报错说不匹配 蛋疼了。。
czhk520 2014-09-01
  • 打赏
  • 举报
回复
引用 4 楼 lineages 的回复:
你可以定义一个事件,譬如叫ProgressChanged,事件的Args包含文件的ID,事件处理时根据ID来更新对应的控件即可。
嗯 我现在在做 大概跟你说的差不多
暈哥 2014-09-01
  • 打赏
  • 举报
回复
引用 2 楼 czhk520 的回复:
我用主线程创建,然后根据一定的规律来命名这些控件,然后在另外一个线程里面把处理好的数据和要使用的控件名用委托传回来,然后再在主线程里面找到这个控件并把数据添加到控件里面 你觉得这样可以嘛?
你可以定义一个事件,譬如叫ProgressChanged,事件的Args包含文件的ID,事件处理时根据ID来更新对应的控件即可。
czhk520 2014-09-01
  • 打赏
  • 举报
回复
引用 1 楼 CGabriel 的回复:
所有控件都只能有主线程 创建,如果使用后台线程创建,时不时会有异常跳出。
请看2楼。。。。 刚开始不知道咋回复 哈哈。。
czhk520 2014-09-01
  • 打赏
  • 举报
回复
我用主线程创建,然后根据一定的规律来命名这些控件,然后在另外一个线程里面把处理好的数据和要使用的控件名用委托传回来,然后再在主线程里面找到这个控件并把数据添加到控件里面 你觉得这样可以嘛?
CGabriel 2014-09-01
  • 打赏
  • 举报
回复
所有控件都只能有主线程 创建,如果使用后台线程创建,时不时会有异常跳出。

110,539

社区成员

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

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

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