Самый простой способ обновить большое приложение winforms С# для WPF

Я работаю над большим С# -приложением (примерно 450 000 строк кода), у нас постоянно возникают проблемы с дескриптором рабочего стола и утечками дескриптора GDI. WPF решает эти проблемы, но я не знаю, что лучше всего обновить (я ожидаю, что это займет много времени). Приложение имеет только несколько форм, но они могут содержать множество различных наборов пользовательских элементов управления, которые определяются программно.

Это внутреннее приложение для компании, поэтому наши циклы выпуска очень короткие (обычно 3-недельный цикл выпуска).

Есть ли какой-то постепенный путь обновления или нам нужно принять удар одним огромным усилием?

5 ответов

Вы можете начать с создания хоста WPF.

Затем вы можете использовать < WindowsFormHost/> чтобы разместить ваше текущее приложение. Затем я предлагаю создать библиотеку новых элементов управления в WPF. По одному вы можете создать элементы управления (я предлагаю сделать их настраиваемыми элементами управления, а не usercontrols). Внутри стиля для каждого элемента управления вы можете начать с использования < ElementHost/> чтобы включить "старый" контроль форм окон. Затем вы можете потратить свое время на рефакторинг и воссоздать каждый элемент управления как полный WPF.

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

Я бы просто не делал этого и не забывал об этом, так как вы можете столкнуться с проблемами с элементами управления, накладывающимися друг на друга (формы Windows плохо работают с WPF, особенно с прозрачными пленками и другими визуальными эффектами)

Пожалуйста, сообщите нам о статусе этого проекта или предоставите дополнительную техническую информацию, если вы хотите получить более конкретные рекомендации. Спасибо:)


Используете ли вы множество элементов управления для элементов? WPF может содержать элементы управления winform, поэтому вы можете кусочно вносить части в основную форму.


Я предполагаю, что вы не просто ухаживаете за ElementHost, чтобы поместить свое огромное приложение Winforms. Это в любом случае не настоящий портинг в WPF. Рассмотрите ответы на эту тему Чем больше препятствий для преодоления миграции из Winforms в WPF?, это будет очень полезно.


WPF позволяет встраивать пользовательские элементы форм Windows в приложение WPF, что может помочь вам сделать переход на более мелкие шаги.

Взгляните на WindowsFormsHost класс в документации WPF.


Существует очень интересный белый документ о переносе приложения winform.NET 2.0 в WPF, см. Развивается в приложении .NET 3.5

Резюме: В этой статье я собираюсь изложить некоторые мыслительные процессы, решения и проблемы, с которыми нам пришлось столкнуться при разработке приложения Microsoft.NET от 1.x/2.x до 3.x. Я смотрю, как мы помогли нашему клиенту принять новую технологию и все же сохранили график выпуска, приемлемый для бизнеса.

licensed under cc by-sa 3.0 with attribution.