0

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

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

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

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

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

  • Я так понимаю, что студия судя по всему компилит код, что бы отображать свойства зависимостей в разметке при разработке. — это зависит от того, что вы там написали. См.: https://ru.stackoverflow.com/a/678619/218063 – Андрей NOP Jul 20 '18 at 12:51

1 Answers1

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))
{
    // запускаем листенер
}