求帮助,请问C# tab内嵌窗口 如何用多线程实现

阿里士多de 2018-02-07 04:23:39
我有一个tab内嵌了几个窗口,但是用现有的循环方式把窗口赋给xtraTabbedMdiManager需要大量的时间,但使用线程去打开showForm方法又会说线程不安全,请问有没有大牛做过类似的功能

private void FrmNodeCombinat_Load(object sender, EventArgs e)
{
foreach (int serviceNodeId in li)
{
showForm(serviceNodeId);
}
}


private void showForm(int serviceNodeId) {
int _nodeStateId = 0;
FrmNodeInfoBase winName = null;
switch (_serviceNodeId)
{
case 1: winName = new Frm1(serviceNodeId, _nodeStateId);
case 2: winName = new Frm2(serviceNodeId, _nodeStateId);
}

if (winName != null)
{
winName.MdiParent = this;
winName.Show();
}

}
...全文
431 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿里士多de 2018-02-22
  • 打赏
  • 举报
回复
结贴了!
结论如下:
1.由于tabcontrol控件的问题,动态add进去的选项卡如果不show就add下一个的话,就无法显示该tab的内容,所以只加载一个选项卡的方法不可行(可能是我不会用吧)。
2.用invoke调用窗口的构建方法确实是变成了多线程调用,但最终结果是执行时间没有缩短,应该是控件主线程的问题,必须一个一个tab地初始化。
3.把方法改成异步方法,结果同上。
解决方案:最终重新封装了窗口的加载函数,把窗口add进tab的时候只初始化控件,在点击tab时才去更新内部数据。(最终还是没有实现我想要多线程同时加载多个窗口的效果)
xuzuning 2018-02-07
  • 打赏
  • 举报
回复
无论你有多少个选项卡,但得以显示的只有一个 所以根本就没必要一次性加载全部
  • 打赏
  • 举报
回复
像你现在写好的方法,如果执行耗时太长,我建议的做法是将方法修改为 async 异步处理,然后在调用的时候 await 异步调用,这样就不会出现主线程卡顿的问题了。按照你的能力这个解决方案也更快改动更少。
  • 打赏
  • 举报
回复
引用 2 楼 u011006672 的回复:
private delegate void show(int i); private void FrmNodeCombinat_Load(object sender, EventArgs e) { show s = new show(showForm); DevExpress.XtraSplashScreen.SplashScreenManager.ShowForm(typeof(WaitForm1)); foreach (int serviceNodeId in li) { this.BeginInvoke(s, serviceNodeId); // this.Invoke(s, serviceNodeId); 效率上没区别 } DevExpress.XtraSplashScreen.SplashScreenManager.CloseForm(); } 我用这种写法效率上跟没用差不多 然后http://www.cnblogs.com/marshal-m/p/3201051.html#synccontext这个帖子里的三种写法第一种效果也是一样,效率提升不大;后两组写法都报了跨线程调用窗口的错 请问是不是我打开窗口的方式不对还是怎样
冒昧问一下,你说效率问题具体是想要做什么?是要减少窗体卡顿时间吗?那你需要做的是把你的操作包裹在task里面,让task后台运行,你现在的做法,耗时的语句还是在主线程执行,慢是自然的。
阿里士多de 2018-02-07
  • 打赏
  • 举报
回复
private delegate void show(int i); private void FrmNodeCombinat_Load(object sender, EventArgs e) { show s = new show(showForm); DevExpress.XtraSplashScreen.SplashScreenManager.ShowForm(typeof(WaitForm1)); foreach (int serviceNodeId in li) { this.BeginInvoke(s, serviceNodeId); // this.Invoke(s, serviceNodeId); 效率上没区别 } DevExpress.XtraSplashScreen.SplashScreenManager.CloseForm(); } 我用这种写法效率上跟没用差不多 然后http://www.cnblogs.com/marshal-m/p/3201051.html#synccontext这个帖子里的三种写法第一种效果也是一样,效率提升不大;后两组写法都报了跨线程调用窗口的错 请问是不是我打开窗口的方式不对还是怎样
  • 打赏
  • 举报
回复
用 invoke 在线程中操作窗体、窗体元素等即可,百度例子太多,我懒得敲代码了。
本资源为网传资源,为一套比较全的电商项目,系统架构采用SOA dubbo+EasyI实现,资源过大上传乃是下载链接,如有侵权请联系/留言,不多说下面上目录: 1.01 电商系统介绍2 f% Z/ C0 z% {1 l" q+ R 2.02 电商类型介绍6 r6 J' |. a2 F, t6 y; _. v# p2 J# ` 3.03 电商系统演示介绍! D$ C$ a1 K( q, c 4.04 电商数据结构介绍 5.05 电商数据结构设计器8 q9 r1 t3 Q( A# T" ?# P0 w+ n 6.06 电商数据准备 7.07 后台管理框架搭建 8.08 spu管理跳转 9.09 分类下拉列表的加载 10.10 商品发布的业务逻辑 11.1.建表 12.2.导数据 13.3.统一环境 14.4.生成js文件0 ~* z9 y2 K/ u; k+ N8 S# l* H: V! Y 15.01 商品spu参数提交- Q( T& z* U- B, ^: q) _ 16.02 商品spu图片上传服务介绍' ], M1 {0 w- x; Z' L. y 17.03 文件上传 工具 18.04 spu信息发布功能) G' E R g0 B( \* X + N& D7 p 19.05 spu动态图片追加% N0 H) M. o8 ~+ A 20.06 spu动态图片追加 21.07 属性功能管理介绍 22.08 属性功能管理介绍 23.09 属性保存功能跳转 24.10 属性双重集合参数3 Z4 [5 |4 D, k, M- G 25.11 属性保存功能业务层代码3 E: v6 D1 y: N* t5 X& Q, | 26.12 属性能业异步内嵌页8 t- |* |7 r# @ 27.13 属性集合查询) q& ~/ W) _9 c* r+ d: D5 Z% Y 28.01 属性的双重集合查询语句 29.02 sku功能介绍! m- K+ b0 K7 U* B! o* g3 S 30.03 sku功能跳转 31.04 客户端js函数中的el表达式 32.05 异步加载spu列表数据# M& R, \7 \3 y z- w+ a% }( g" ^ 33.06 用复选框操作属性列表显示 D+ k( T; J. J" `2 u 34.07 属性参数的提交) O0 o, s0 X \! P! @0 b& H 35.08 sku的数据结构说明8 m! S+ i9 k) W4 F# ?7 U 36.09 sku添加的业务实现1 |' b G% [! w/ J* C n; N 37.10 easyui的介绍 38.11 easyui的layout初始化介绍- v- C+ z# J) e- O* I! G 39.12 easyui手风琴控件介绍1 X/ X# \' k% x2 N 40.13 tree控件 41.14 tab控件: U, |: a! S7 ?: A$ t1 ?, G 42.1.properties% C2 @ d! }9 Z& ^2 c 43.2.主键9 D3 f9 W4 J* C" B4 M 44.3. 锚点. F( v2 C8 q- I# F+ G 45.01 数据表格的用法: e: S' z. T0 @8 T( `6 L 46.02 combobox的用法; _6 }2 p3 v: O7 l* } 47.03 嵌套布局的用法% L! U! L0 ]% B 48.04 easyui同步提交后跳转问题 49.05 乱码问题! {6 |( X* i) u; w! Y' B 50.06 首页初始化 51.07 用户登录方法 k, `) e/ R( F& m5 X 52.08 通过cookie取得用户的个性化信息, J7 ?0 ]' A) \6 E7 n5 K 53.09 通过客户端cookie取得用户的个性化信息0 i7 ], O/ }# H: t6 @: j) I+ i 54.10 用户个性化信息9 b% h5 O% p; I" P7 z 55.11 任务总结 56.01 商品检索介绍 57.02 商品分类检索介绍7 J% Q6 L& r: T6 N. H8 a- E6 Y% f" d" S4 I 58.03 商品分类检索sql: Z- N/ w: k; }2 b9 E( w8 I 59.04 商品分类检索列表 60.05 商品属性检索介绍 61.06 ajax字符串数组传参 62.07 ajax字符串json传参& i' g9 \7 ^! e7 _ 63.08 表单序列化传参 64.09 动态sql的设计方法" o# D. ?# R% _1 X 65.10 动态sql的实现 66.11 任务 67.1.项目演示 68.2.resu

110,536

社区成员

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

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

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