none
vs2005 vs.net winform界面刷新 RRS feed

  • 问题

  • 遇到问题如下:

    vs2005 vc.net winform

    任务执行时间较长,界面就像死掉一样,控件不能点击,而且一些控件就像卡住一样,有重影。等任务结束了,界面又恢复了。执行任务时好像都挂起了,比如,我窗体上有个label显示当前时间,时间的更新是在timer的tick事件中完成的,执行任务时,这个时间都卡住了,很迷惑。忘高手能帮忙解答。

    2012年1月12日 7:27

答案

全部回复

  • http://msdn.microsoft.com/en-us/library/ms171728.aspx WinForm多线程操作控件

    一般好像是一个逻辑过程如果执行时间超过0.3秒就需要考虑另开一个线程去做(这个具体是0.3还是3记得不大清楚了,呵呵)。

    当你在其他线程更新UI线程控件时需要最好是将代码抛到别的线程去执行,直到目的线程是UI线程再执行(Invoke方法)。

    当执行某个方法时,界面出现假死情形,你也可以尝试使用Application.DoEvents方法。


    Mike Zhang[MSFT]
    MSDN Community Support | Feedback to us
    2012年1月13日 2:26
  • vc.net带了委托。用它更新界面就ok

    或者跨线程更新UI线程。说白了也是Invoke。。。。。用它吧。


    Keep it simple
    2012年1月13日 8:37
  • 多谢大侠,多线程搞定此问题。但现在还有个小问题,就是线程间控件的相互访问。我程序中只gcnew了一个thread,相当于一个主线程,还有一个另外的线程(不知道这样说对不对),我想在新建的线程中更改主线程中创建的控件的一些属性会提示错误。我查阅了一些方法,设置了

    this->CheckForIllegalCrossThreadCalls=false;这样做表面上实现了我的想法,但仅仅是将错误提示屏蔽掉了,但如何解决这个问题,还不是很明白。

    2012年1月16日 6:27
  • 多谢大侠指点,我查询一些Invoke的用法
    2012年1月16日 6:28
  • 明白了,多谢!
    • 已标记为答案 郭永超 2012年1月16日 6:47
    2012年1月16日 6:47