请教一个多线程处理的问题

猪爷爷 2014-05-13 03:31:44
我现在对一个ERP系统进行二次开发,其中的报表模块打开很多报表都很慢,当前的状况是只要查询一个报表卡住的话,整个系统都是无法操作的。。。因此我想使用多线程来处理。

问题来了:
首先这个系统的所有窗体都是采用CreateInstance来实例化的(静态方法),并且在实例化的方法中还会设置子窗体的Parent属性,当我直接将这个实例化的方法用多线程启动的时候,就会报错"在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级"。。。
请问大神我该如何处理?
...全文
104 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouxiulu 2014-05-13
  • 打赏
  • 举报
回复
CPU操作用线程,数据操作用异步
猪爷爷 2014-05-13
  • 打赏
  • 举报
回复
已经解决了,方法: Thread tr=new Thread(()=> { 耗时的数据处理操作。。。 Invoke((ThreadStart)delegate() { 和UI的操作。。。 }); tr.Abort(); }); tr.Start();
猪爷爷 2014-05-13
  • 打赏
  • 举报
回复
引用 5 楼 wmg494005678 的回复:
[quote=引用 4 楼 u013384702 的回复:] [quote=引用 3 楼 wmg494005678 的回复:] 一些耗时的查询操作需要放到后台线程中去执行,UI线程就不会卡了,如果在后台线程(非UI线程)中操作UI控件,c#里面本身是不允许这种操作的,实际上还是要将处理UI的操作传递给UI线程去处理,你可以在需要操作UI的地方调用Control.Invoke方法,将操作转给UI线程处理
那如果我把数据获取放到后台线程去处理,我怎么知道它是否处理完了呢,还有它返回的数据我怎么送到到前面的UI里去?[/quote] 后台操作什么时候处理完,你不知道吗?? Control.Invoke 将UI操作交给UI线程处理,随便你怎么弄了[/quote] 后台是数据库那边的操作哦,那我还是要一直等待到从数据库返回吗?我这样做应该还是会卡住啊,而且线程返回的数据我不知道怎么处理
wmg494005678 2014-05-13
  • 打赏
  • 举报
回复
引用 4 楼 u013384702 的回复:
[quote=引用 3 楼 wmg494005678 的回复:] 一些耗时的查询操作需要放到后台线程中去执行,UI线程就不会卡了,如果在后台线程(非UI线程)中操作UI控件,c#里面本身是不允许这种操作的,实际上还是要将处理UI的操作传递给UI线程去处理,你可以在需要操作UI的地方调用Control.Invoke方法,将操作转给UI线程处理
那如果我把数据获取放到后台线程去处理,我怎么知道它是否处理完了呢,还有它返回的数据我怎么送到到前面的UI里去?[/quote] 后台操作什么时候处理完,你不知道吗?? Control.Invoke 将UI操作交给UI线程处理,随便你怎么弄了
猪爷爷 2014-05-13
  • 打赏
  • 举报
回复
引用 3 楼 wmg494005678 的回复:
一些耗时的查询操作需要放到后台线程中去执行,UI线程就不会卡了,如果在后台线程(非UI线程)中操作UI控件,c#里面本身是不允许这种操作的,实际上还是要将处理UI的操作传递给UI线程去处理,你可以在需要操作UI的地方调用Control.Invoke方法,将操作转给UI线程处理
那如果我把数据获取放到后台线程去处理,我怎么知道它是否处理完了呢,还有它返回的数据我怎么送到到前面的UI里去?
wmg494005678 2014-05-13
  • 打赏
  • 举报
回复
一些耗时的查询操作需要放到后台线程中去执行,UI线程就不会卡了,如果在后台线程(非UI线程)中操作UI控件,c#里面本身是不允许这种操作的,实际上还是要将处理UI的操作传递给UI线程去处理,你可以在需要操作UI的地方调用Control.Invoke方法,将操作转给UI线程处理
猪爷爷 2014-05-13
  • 打赏
  • 举报
回复
引用 1 楼 campsun 的回复:
所有UI都是在UI主线程上的,因此你打开新的页面也是基于该主线程的。 你需要把报表内容读取运算放到多线程上去处理。
我的是WINFORM,UI应该可以独立吧?
狐狸大仙 2014-05-13
  • 打赏
  • 举报
回复
所有UI都是在UI主线程上的,因此你打开新的页面也是基于该主线程的。 你需要把报表内容读取运算放到多线程上去处理。

110,533

社区成员

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

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

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