我遇到了RenderTargetBitmap的问题,因为我在后台线程上更改绑定属性后无法一致地获取更新的渲染。
这就是我所拥有的:
public class MyClass : DropCreateDatabaseAlways<connectionstringContextName>
{
protected override void Seed(MyContext context)
{
// Your seed data
}
}
唉,大概有一半的时间我在使用新值更新控件之前获取渲染,而另一半则正确更新。
根据我的理解,WPF会自动将属性更改通知发送到UI线程。在执行渲染之前,如何确保这些已分派的通知都已处理完毕?如果我确保在Dispatcher线程上更新 // Update a property on an INotifyPropertyChanged view model
// This runs on a background thread
viewModel.SomeBoundProperty += 10;
// Flush dispatcher queue (from http://stackoverflow.com/a/2596035/612510)
_lcd.Dispatcher.Invoke(() => {}, System.Windows.Threading.DispatcherPriority.Loaded);
// Render the updated control
_lcd.Dispatcher.Invoke(() =>
{
_lcd.Measure(new System.Windows.Size(240, 160));
_lcd.Arrange(new System.Windows.Rect(0, 0, 240, 160));
_lcd.UpdateLayout();
_renderTarget.Render(_lcd);
}
,则此代码可以正常工作,但这对于此特定应用程序来说不太理想。
有什么建议吗?
答案 0 :(得分:0)
我试图通过DispatcherPriority.Background
优先级调度属性更改通知进行一些反复试验,因此将刷新线更改为:
// Flush dispatcher queue
_lcd.Dispatcher.Invoke(() => {}, System.Windows.Threading.DispatcherPriority.ContextIdle);
......看起来它解决了这个问题。 DispatcherPriority.ContextIdle
比DispatcherPriority.Backgound
低一级。渲染现在每次都会更新。