关于Silverlight中Model子窗体中的界面刷新问题.

Wyvern2000 2010-10-06 09:38:32
在主窗体中做一些比较复杂耗时的操作, 需要用一个子窗体显示进度条, 以指示当前操作的进度.
由于某些原因, 无法将这些耗时的操作移到线程中进行, 所以只好找在操作中释放资源, 以刷新子窗体的方法.
以前在 Delphi 中可以用 Application.ProcessMessages;
而在 VB 则可以用 DoEvents( ); 进行界面的刷新,
但在 Silverlight 中尚未找到, 请各位达人帮忙.
谢谢!
...全文
131 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ycg_893 2010-10-08
  • 打赏
  • 举报
回复
一个简单的办法试试,进行耗时操作前先打开进度窗口,只有进度窗口正常打开完后告诉主窗口,主窗口才开始操作。
Wyvern2000 2010-10-08
  • 打赏
  • 举报
回复
我现在在试用 Dispatcher.BeginInvoke( ),
发现在循环中使用 BeginInvoke( ) 是无效的, 界面不刷新.
必须在 BeginInvoke( ) 中递归调用 BeginInvoke( ) 才能正常刷新界面.
这又是什么原因呢?
Wyvern2000 2010-10-07
  • 打赏
  • 举报
回复
以前在 Delphi 中,只要在循环体中加一句 Application.ProcessMessages( ) 就可以将子窗体刷新了.
在 VB 中, 在循环体中加一句 DoEvents( ) 也可以.
但在 Silverlight 中找到类似的语句.
Wyvern2000 2010-10-07
  • 打赏
  • 举报
回复
"由于某些原因, 无法将这些耗时的操作移到线程中进行."

是单线程的, 在主窗体中做耗时的操作, 但是要同步更新子窗体的进度.

现在的情况是, 由于主窗体一直在循环中处理, 导致子窗体没有CPU资源, 所以子窗体一直不显示, 直到最后操作结束了, 子窗体才闪了一下.
Sunpire 2010-10-07
  • 打赏
  • 举报
回复
其实在 Silverlight 中,要显示进度可以不使用多线程的,使用 数据绑定 就可以了。
数据绑定 是通过事件订阅的方式更新前台的显示的,并且解决了跨线程访问控件的问题。
jv9 2010-10-07
  • 打赏
  • 举报
回复
" 所以只好找在操作中释放资源, 以刷新子窗体的方法."

这个不是很明白什么意思。楼主是想问Silverlight多线程的操作么?

8,756

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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