使一个C#库对WPF动画线程安全的方法

3
我正在使用 Artefact Animator库。我发现这个库不是线程安全的。
为什么它需要是线程安全的?我的WPF应用程序有多个UI线程
有没有好的技巧可以使其线程安全而无需重新编写库?我通过制作多个库的副本并为每个启动的线程更改库命名空间来将其强制执行,但这是一个糟糕的解决方案,因为现在我有了多个源代码副本,并且使用语句已被调整。也许有一些方法可以通过反射自动化这个过程或包装命名空间?我不知道。
背景:我有大约5到15k个WPF图像对象正在进行动画处理(在多个监视器上)。当它们都在一个线程上运行时,动画会变得很卡顿。如果有更好的方法也可以实现这一点,我愿意接受解决方案。

你能否为Artefact Animator创建一个线程安全的包装器? - Shashank Shekhar
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Alex Wiese
你好!你找到解决方案了吗?我也遇到了完全相同的问题,已经苦苦挣扎了三天。 - IneedHelp
此外,我必须补充说明的是,发生这种情况的原因是因为该库处理了在第一个线程中创建的依赖对象,然后这些对象不能在不同的线程中使用。 - IneedHelp
我从未找到合适的解决方案。我最多使用了3个线程,因此我保留了3个程序集版本,每个版本都有不同的命名空间;每个线程一个版本。最终,我通过将动画生成为PNG序列来避免这个问题,然后播放PNG序列,而不是在运行时实际地对15k个对象进行动画处理。 - Kendall Trego
显示剩余2条评论
1个回答

1
WPF要求所有窗口/控件/依赖对象具有线程关联性。因此,如果您在一个线程上创建了一个WPF窗口,则将来对该窗口所做的所有更改都必须在同一线程上进行。因此,几乎所有WPF应用程序都只有一个用户界面线程。其他线程可能用于后台处理或其他数据处理活动,但反馈会发送到用户界面线程以供显示。
我怀疑你的Artefact Animator库是根据这个假设编写的,因为大多数WPF应用程序都是这样编写的。转换库需要您了解其设计,然后正确重新设计它以按预期工作。这可能很简单,也可能几乎不可能,具体取决于库的情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接