invoke 界面冻结问题 BeginInvoke可以异步执行,窗口不冻结。而Invoke则冻结窗口,这可如何是好。我是做移动开发的,.net cf里BeginInvoke不能用,在网上看了一个UISafeInvoker的文章,但没找到源码。望高手指点! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Invoke的委托当中的实现放在一个子线程里去做就可以了 In main thread, you must use Application.DoEvents() to waiting the result of sub-threads when you call invoke in sub-threads. otherwise you will hang the UI. 支持线程就可以啊,BeginInvoke也只是一种线程的异步执行模式罢了,可以自己实现 invoke表示要回到调用invoke的线程去执行你的函数,如果你使用ui对象进行invoke,拿UI线程就会停下来做那个函数的事情,你的函数应该放在其他线程中执行,invoke在UI线程中的应该仅仅是需要呈现的结果信息函数而已。 BeginInvoke在.net cf中是支持的吧? BeginInvoke在cf里可以“点儿”出来,但执行就报错。所以不能用。我用Invoke是在一个线程里,执行的过程是要在界面上画很多的东西,大概需要好几秒的时间。这样窗口就冻结了好几秒。但是,如果不用Invoke,在线程里画图就会报错的。现在唯一的办法就是在绘图过程中加Application.DoEvents()。不过这种方法好像有些牵强。是不是要等cf升级了才能支持呀,郁闷中 Application.DoEvents()是必须的,不是牵强,因为Invoke就是在UI线程内执行,如果不用Application.DoEvents(),UI线程的消息循环就停止了。 是学 winform 好还是 WPF 好? c#怎么读取word目录里的内容 如何判断某个变量是否符合枚举类型的元素 求自更新程序c#怎么实现? c# 调用excel中已存在的宏 我做了一个windows服务,想把它卸载,请问那一位高手知道如何卸载? C#winform中怎么将程序最小化到系统托盘? comboBox值得变化,关联其他textbox,怎么不对 数据库邦定问题,dataGrid 窗体更新的问题,高分求教,在线等待 C# 消息发送问题 在线等 按顺序执行程序
我用Invoke是在一个线程里,执行的过程是要在界面上画很多的东西,大概需要好几秒的时间。这样窗口就冻结了好几秒。但是,如果不用Invoke,在线程里画图就会报错的。
现在唯一的办法就是在绘图过程中加Application.DoEvents()。不过这种方法好像有些牵强。是不是要等cf升级了才能支持呀,郁闷中