使WPF动画的C#库线程安全

时间:2015-03-11 20:55:32

标签: c# .net wpf

我正在使用Artefact Animator库。这个库对我来说不是线程安全的。

为什么需要线程安全?我的WPF应用程序有multiple UI threads

如果没有重新编码库,是否有一个很好的技巧来使这个线程安全?我已经通过制作库的多个副本以及为我开始的每个线程更改库名称空间来将其入侵提交,但这是一个糟糕的解决方案,因为现在我有多个源代码副本并使用调整声明。也许有某种方法可以自动化这个或用反射包装名称空间?我不知道。

关于为什么的背景我是这样做的:我有一些介于5到15k WPF图像对象之间的动画(在多个监视器上)。当动画在一个线程上运行时,动画会变得不稳定。如果有人有更好的方法来做到这一点,我就会接受解决方案。

1 个答案:

答案 0 :(得分:1)

WPF要求所有窗口/控件/依赖项对象都具有线程关联性。因此,如果您在一个线程上创建一个WPF窗口,那么对该窗口的所有更改必须在将来在同一个线程上发生。因此,几乎所有WPF应用程序都只有一个用户界面线程。其他线程可能用于后台处理或其他数据处理活动,但反馈会被发送到用户界面线程以供显示。

我怀疑你的Artefact Animator库是用这个假设编写的,因为这就是大多数WPF应用程序的编写方式。转换库需要您了解其设计,然后根据需要正确地重新设计它。根据图书馆的不同,这可能很简单或几乎不可能。