Как убить вечный цикл в DataContext?

185
17 сентября 2018, 17:40

Есть класс-обертка над HttpListener. Запускает listener сразу из конструктора. Этот класс добавлен в качестве DataContext через разметку.

Я так понимаю, что студия судя по всему компилит код, что бы отображать свойства зависимостей в разметке при разработке.

Проблема в том что, даже не запустив проект сервер работает. А при попытке запуска ругается, мол на этом компьютере данный префикс уже зарегистрирован.

В конечном итоге студия решила что с нее хватит. Зависла. Пришлось прекратить ее страдания)

Можно, конечно, вынести запуск сервера в отдельный метод, потом запускать командой. Но хотелось бы решить проблему, а не обойти ее.

Answer 1

Дело в том, что дизайнер студии компилит классы. И естественно, конструктор класса прогоняется тоже. Поэтому самым простым решением будет вынести запуск листенера в отдельный метод, который вы будете дёргать, когда программа действительно запускается.

  <Window> 
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
      <command:EventToCommand
        Command="{Binding RunListenerCommand}" />
    </i:EventTrigger>
  </i:Interaction.Triggers>
 ....
</Window>

RunListenerCommand - команда, которую вы определили в своей ViewModel.

Вторым вариантом будет в конструктор встроить вот такое:

if(!DesignerProperties.GetIsInDesignMode(this))
{
    // запускаем листенер
}
READ ALSO
Как создать форму с отдельным потоком для обработки виндоус сообщений?

Как создать форму с отдельным потоком для обработки виндоус сообщений?

Для программы создаётся расширение наNET с использованием WinForms

200
Как правильно упаковывать ImageTarget(Vuforia) в AssetBundle?

Как правильно упаковывать ImageTarget(Vuforia) в AssetBundle?

Во время работы, программа должна принимать AssetBundleAssetBundle должен содержать ImageTarget и контент, относящийся к нему

219
LINQ из выражения в точечную нотацию

LINQ из выражения в точечную нотацию

Есть классы моделей

158
Как десериализовать такой JSON (в Visual Studio)? [дубликат]

Как десериализовать такой JSON (в Visual Studio)? [дубликат]

На данный вопрос уже ответили:

179