C# WPF资源[此对象密钥]导致死锁

C# WPF资源[此对象密钥]导致死锁,c#,.net,wpf,visual-studio,C#,.net,Wpf,Visual Studio,我正在.NETFramework 4.5.1下运行一个WPF项目。 有时,在后台线程上运行的方法会阻塞 lock (some_lock_up_the_callstack) ... var rsc = App.Current.Resources["some_key"] as System.Windows.Media.Imaging.BitmapImage 同时,主线程在尝试访问数据绑定时也在等待some\u lock\u\u\u callstack 具有keysome\u key的请求资源实际上

我正在.NETFramework 4.5.1下运行一个WPF项目。 有时,在后台线程上运行的方法会阻塞

lock (some_lock_up_the_callstack)
...
var rsc = App.Current.Resources["some_key"] as System.Windows.Media.Imaging.BitmapImage
同时,主线程在尝试访问数据绑定时也在等待
some\u lock\u\u\u callstack

具有key
some\u key
的请求资源实际上位于合并字典中

我似乎无法用一个小的测试项目重现这个问题,而且它似乎没有涵盖任何线程安全点。我尝试锁定主线程,并在锁定资源时尝试访问资源,以查看resources[]访问器是否锁定主线程,但情况似乎并非如此。至少我不能复制它

非常感谢您的帮助

查找资源字典的


在我的例子中,似乎因为
CanBeAccessedAcrossThreads
true
,所以资源的访问器锁定
SyncRoot
,在
CanBeAccessedAcrossThreads==true
的情况下,这意味着它实际上锁定了
SystemResources.ThemeDictionaryLock
。因此,当wpf引擎正在执行某项操作时,它可能会锁定该操作并导致死锁。

您是否在UI线程上下文中的任何位置等待后台任务?是的,主线程正在等待后台线程持有的锁。这不是我的意思,但没关系(只是测试了一些东西)。无论如何,锁定你的UI线程听起来是个糟糕的方法。。。为锁定操作启动另一个任务,或者不读取资源访问的锁定,怎么样?