begininvoke操作UI线程

letyougo 2017-01-17 01:50:14
从其他线程切换到ui界面去操作的时候,用了begininvoke来切换,但是有时候却切不到ui线程去操作了,比如我的begininvoke是往form界面添加一个page,但是却经常性不去执行begininvoke绑定的那个方法。有人有这样的情况么?谁能解释下为什么会这样?
...全文
201 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
letyougo 2017-01-20
  • 打赏
  • 举报
回复
引用 6 楼 jwh2004 的回复:
程序结构好乱,委托里用了两个lock,还用sleep,也不拍多线程死锁吗
这个问题先不考虑,能看看我的问题么
jwh2004 2017-01-18
  • 打赏
  • 举报
回复
程序结构好乱,委托里用了两个lock,还用sleep,也不拍多线程死锁吗
白衣如花 2017-01-17
  • 打赏
  • 举报
回复
引用 4 楼 letyougo 的回复:
[quote=引用 2 楼 crystal_lz 的回复:] 那就用 Invoke
直接用invoke也有问题,因为如果调用invoke的时候,form还没生成的话,会导致界面假死了,而用begininvoke的话,能让当时不去执行,直到form在后续生成好以后再去执行添加tabpage的逻辑[/quote]
while(!xtraTabControl_runResult.IsHandleCreated)
    Thread.sleep(500);
xtraTabControl_runResult.Invoke(AddTabPageEvent, xtraTabControl_runResult, page);
IsHandleCreate能判断界面是否已经加载完成
letyougo 2017-01-17
  • 打赏
  • 举报
回复
引用 2 楼 crystal_lz 的回复:
那就用 Invoke
直接用invoke也有问题,因为如果调用invoke的时候,form还没生成的话,会导致界面假死了,而用begininvoke的话,能让当时不去执行,直到form在后续生成好以后再去执行添加tabpage的逻辑
letyougo 2017-01-17
  • 打赏
  • 举报
回复
引用 1 楼 qq_34266409 的回复:
贴上代码讲话
定义:private delegate void AddTabPageHandle(XtraTabControl tabControl, XtraTabPage tabPage); 绑定的方法: private AddTabPageHandle AddTabPageEvent== new AddTabPageHandle(AddTabPageToTabControl); 方法的实现: private void AddTabPageToTabControl(XtraTabControl tabControl, XtraTabPage tabPage) { try { string ruleName = tabPage.Text.Trim(); bool isExist = true; lock (_obj1) { Thread.Sleep(150); isExist = CheckTabExist(tabControl, ruleName);(判断这个tablepage是否已经存在) if (isExist == true) { //return; } else { lock (obj) { tabControl.TabPages.Add(tabPage); } } } } catch (Exception ex) { throw ex; } } 执行逻辑: if (xtraTabControl_runResult.InvokeRequired) { xtraTabControl_runResult.BeginInvoke(AddTabPageEvent, xtraTabControl_runResult, page); } else { AddTabPageToTabControl(xtraTabControl_runResult, page); } 逻辑很简单,首先判断是否需要切线程,如果需要就调用begininvoke方法(并且判断是否已经存在,不存在就添加),如果不需要切换线程,则直接往界面添加tabpage。事实是:偶尔调用begininvoke方法以后,直到程序运行结束了,仍然不会去执行里面绑定的方法。求解释。
crystal_lz 2017-01-17
  • 打赏
  • 举报
回复
那就用 Invoke
Mooyi_水 2017-01-17
  • 打赏
  • 举报
回复
贴上代码讲话

110,538

社区成员

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

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

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