WPF资源[此对象密钥]导致僵局



我在.NET Framework 4.5.1下运行WPF项目。有时,在背景线程块上运行的方法

lock (some_lock_up_the_callstack)
...
var rsc = App.Current.Resources["some_key"] as System.Windows.Media.Imaging.BitmapImage

同时,主线程在尝试访问数据框时也在some_lock_up_the_callstack上等待。

带有键some_key的请求资源实际上位于合并的字典中。

我似乎无法通过一个小的测试项目来重现此问题,而上面的MSDN文章似乎不能涵盖任何线程安全点。我尝试锁定主线程,并在锁定资源时尝试访问资源以查看,如果资源[]登录器是否锁定了主线程,但事实并非如此。至少我无法复制它。

任何帮助都非常感谢!

查看Resouscectionary

的源代码

看来,由于CanBeAccessedAcrossThreads是我的情况的CC_3,因此资源锁定的登录器SyncRootCanBeAccessedAcrossThreads == true中意味着它实际上锁定SystemResources.ThemeDictionaryLock。因此,当WPF发动机在做某事时,可能会锁定造成僵局。

最新更新