2015-03-11 4 views
3

Я пользуюсь библиотекой Artefact Animator. Эта библиотека не является потокобезопасной, я нашел.Создание потоковой библиотеки библиотеки C# для анимации WPF

Почему это должно быть потокобезопасным? В моем приложении WPF есть multiple UI threads.

Есть ли хороший трюк для обеспечения безопасности этого потока без повторной кодировки библиотеки? Я взломал его в представлении, сделав несколько копий библиотеки и изменив пространство имен библиотек для каждого потока, который я запускаю, но это плохое решение, потому что теперь у меня есть несколько копий исходного кода с tweaked с помощью операторов. Может быть, есть способ автоматизировать это или обернуть пространства имен с отражением? Я не знаю.

Для фона на почему Я делаю это: у меня есть где-то между объектами изображения размером от 5 до 15 тыс., Которые я анимация (на нескольких мониторах). Анимация становится нестабильной, когда все они работают в одном потоке. Если у кого-то есть лучший способ сделать это, я открыт для решений.

+0

Вы не можете создать потокобезопасную оболочку для Artefact Animator? – Shekhar

+0

Я бы хотел, но библиотека широко использует статические переменные, поэтому я не уверен, как –

+0

Это может быть невероятно сложно, но можно ли запускать отдельные области приложений или процессы и использовать IPC для связи между if тебе нужно? –

ответ

1

WPF требует, чтобы все объекты windows/controls/dependency имели сходство потоков. Поэтому, если вы создаете окно WPF в потоке, все изменения в этом окне должны происходить в том же потоке в будущем. В результате практически все приложения WPF имеют только один поток пользовательского интерфейса. Другие потоки могут использоваться для фоновой обработки или другой обработки данных, но обратная связь затем отправляется в поток пользовательского интерфейса для отображения.

Я подозреваю, что ваша библиотека Artefact Animator была написана с учетом этого предположения, потому что именно так написано большинство приложений WPF. Преобразование библиотеки требует, чтобы вы поняли ее дизайн, а затем правильно переработали его для работы по желанию. Это может быть просто или почти невозможно в зависимости от библиотеки.

Смежные вопросы