【发布时间】:2013-07-17 11:49:40
【问题描述】:
我在使用 WPF 的 Adorner 时遇到了一些问题。我的装饰器没问题,但我没有在我想要的时候显示它。
我喜欢做这样的事情:
public void MyAction()
{
// property bound to the adorner VisibiltyProperty
// I like the happen a refresh now
// (code is wired correct, if I finish method here, the adorner is drawn)
this.IsAdornerEnabled = true;
try
{
... doing some long lasting things I cannot do async cause it depends on a lot of objects owned by main thread...
}
finally
{
// I like the adorner to be removed from UI now
this.IsAdornerEnabled = false;
}
}
IsAdornerEnabled 属性正确绑定到装饰器并向其发出通知。但是在这段代码中,当方法终止时,装饰器会在瞬间被绘制和移除。
如何在 UI 线程被阻塞之前渲染它?
非常感谢任何帮助。
说明: 我喜欢使用装饰器在我的主选项卡上创建一个不可点击的半透明窗格,上面有“加载模块”之类的文本。当我的 MainThread 使用 magellan 导航,使用 Castle 解决依赖关系,然后创建大量 DevExpress 控件时,我喜欢展示这个窗格。然后我再次删除它。我可以创建装饰器,这没问题。装饰器在我的原型设计项目中工作,我不做任何其他事情。
【问题讨论】:
-
这是有道理的,因为您的进度不是异步的,使装饰器创建通知等等,但是由于您阻塞了(UI?)线程,所以没有人可以绘制因此没有装饰器被渲染。跨度>
-
这就是我要问的,如何在阻塞 UI 线程之前强制我的应用程序呈现装饰器?
-
adorder 是否应该像进度条一样工作?
-
至少目前,它不必表现得像一个进度条。这只是一个超载。但是你新人知道客户接下来有什么想法;-)
标签: c# wpf mvvm refresh adorner