• Как из DispatcherTimer вывести данные в UI не дожидаясь его завершения?

    @Melz
    UI обновляется в отдельном треде через dispatcher. В вашем случае он еше не успел сделать свою работу.
    те или делать sleep-delay или как-то так:

    this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Render, (Action)delegate()
      {
         Todo: print
      });


    Можно еше повысить приоритет диспатчера, но это так себе идея.
    Ответ написан
    1 комментарий
  • Как добавить в ListBox кнопку в начало или конец списка?

    WNeZRoS
    @WNeZRoS
    При бидинге коллекции к ItemsControl создаётся CollectionView (для IEnumerable, для IList - ListCollectionView), который может дополнительно отсортировать или отфильтровать коллекцию. Элементы, видимые на экране, берутся из этого CollectionView, а не из оригинальной коллекции.

    ListCollectionView имеет проперти NewItemPlaceholderPosition, с помощью которого можно добавить фейковый элемент в начало или конец.
    // CollectionView можно получить двумя способами:
    // 1. Просто получить дефолтный вариант для коллекции
    var collectionView = (ListCollectionView)CollectionViewSource.GetDefaultView(Items);
    // 2. Создать свой, тогда именно этот созданный collectionView надо передавать для биндинга в ItemsSource.
    var collectionView = new ListCollectionView(Models);
    
    // После, можно добавить фейковый элемент
    collectionView.NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtBeginning;

    После этого в ListBox появится элемент CollectionView.NewItemPlaceholder, который можно отдельно стилизовать с помощью DataTemplateSelector.

    DataTemplateSelector
    public sealed class NewItemTemplateSelector : DataTemplateSelector
    {
       public DataTemplate ItemTemplate { get; set; }
       public DataTemplate NewItemPlaceholderTemplate { get; set; }
    
       public override DataTemplate SelectTemplate(object item, DependencyObject container)
       {
          if (item == CollectionView.NewItemPlaceholder)
             return NewItemPlaceholderTemplate;
    
          return ItemTemplate;
       }
    }

    <ListBox.ItemTemplateSelector>
        <t:NewItemTemplateSelector>
            <t:NewItemTemplateSelector.ItemTemplate>
                <DataTemplate>
                    <!-- Шаблон обычного элемента -->
                </DataTemplate>
            </t:NewItemTemplateSelector.ItemTemplate>
            <t:NewItemTemplateSelector.NewItemPlaceholderTemplate>
                <DataTemplate>
                    <!-- Шаблон CollectionView.NewItemPlaceholder -->
                    <Button Content="+" />
                </DataTemplate>
            </t:NewItemTemplateSelector.NewItemPlaceholderTemplate>
        </t:NewItemTemplateSelector>
    </ListBox.ItemTemplateSelector>

    Ответ написан
    Комментировать
  • Чем string.Empty отличается от String.Empty?

    Nipheris
    @Nipheris Куратор тега C#
    Сведём вопрос к "Чем string отличается от String?"

    https://docs.microsoft.com/en-us/dotnet/csharp/lan...
    The following table shows the keywords for built-in C# types, which are aliases of predefined types in the System namespace.


    string - кейворд для стандартного типа данных, определённый в стандарте языка, String (он же System.String) - класс, предоставляемый CTS. В коде на C# это одно и то же, но лучше использовать string.
    Ответ написан
    3 комментария
  • Чем string.Empty отличается от String.Empty?

    Morpheus_God
    @Morpheus_God
    string это алиас для System.String. Сравнить можно с int и System.Int32. Поэтому разницы нет. Разве что подсветка слова другая. String будет как класс подсвечивать.
    Ответ написан
    Комментировать
  • Как понять VLANы?

    athacker
    @athacker
    Влан -- это всего лишь идентификатор в ethernet фрейме. Который может принимать значения от 1 до 4094. Вланы не бывают тегированными или не-тегированными, они по определению тегированные. Бывает тегированным или не-тегированным трафик. Тегированный -- это тот, в ethernet фреймах которого соответствующее поле реально содержит VID -- VLAN ID, т. е. номер влана. Не-тегированный -- соответственно, такой фрейм, где номера влана нет.

    Транковый порт коммутатора -- это порт, который настроен таким образом, чтобы принимать и передавать тегированный трафик, и этот трафик может быть из разных вланом (физически это означает, что в трафике могут быть разные VID -- идентификаторы вланов). Например, так настраиваются порты, к которым подключены другие коммутаторы. Или, например, маршрутизаторы. Или, например, сервера с виртуалками.

    Порт, настроенный для приёма не-тегированного трафика, всё равно осознаёт себя в каком-то влане. Т. е. коммутатор внутри себя считает, что в этот порт ему прилетает нетегированный трафик, но этот трафик нужно относить к такому-то влану. Какому конкретно влану -- задаётся сетевым администратором при настройке и включении порта. Не-тегированный трафик может улететь в тегированный (транковый) порт, например, и в этом случае на выходе из транкового порта коммутатор в трафике явным образом проставит тег.

    Может быть и обратная ситуация -- прилетит тегированный трафик в транковый порт (допустим, в 5-ом влане). Коммутатор определит, что получатель трафика находится на таком-то порту, и этот порт настроен для отправки не-тегированного трафика. Тогда коммутатор перед передачей пакета в этот порт уберёт трафик из фрейма и только потом отдаст фрейм в порт.

    В транковые порты может прилетать любое количество вланов (ну, до 4096, понятное дело). В не-тегированные -- только один какой-то влан, как вы понимаете, так как тега-то в трафике нет, и единственный способ отнести этот трафик к какому-то влану -- это явным образом прописать в настройках коммутатора, что вот этот вот порт относится к такому-то влану.

    Обычные компы могут принимать тегированный трафик только в случае дополнительных действий. На винде это должен поддерживать драйвер, и ещё он иметь средства управления вланами на интерфейсе. На линуксе тоже нужно создавать отдельным образом саб-интерфейсы с указанием тегов.

    Что касается микрота -- добейтесь сначала связи между роутером и компом в сети 192.168.1.0, без DHCP и тем более натов.

    IP 192.168.1.1 пингуется из сети 192.168.0.1 -- это понятно, так как адрес принадлежит вашему маршрутизатору. Вы можете ему на интерфейс 8.8.8.8 повесить, и он тоже будет пинговаться, даже при отсутствии интернета -- если между роутером и компом связь есть.

    Service tag ставить не надо -- это уже из области Q-in-Q, вложенных вланов (если на пальцах).

    Vlan1 -- какой vlad ID имеет?
    Ответ написан
    1 комментарий
  • Windows 10 IOT и Raspberry Pi. Правильно ли я понял концепцию?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    Windows 10 IOT это профанация того, что мелкомягкие захотели мирового господства и показать что темой IOT они типо тоже занимаются.
    В итоге это направление умерло также как и Windows Phone, т.к. IOT получилась настолько обрезанной и недопиленной что ее даже ардуина местами обходила.
    Ответ написан
    Комментировать
  • Есть ли какие-либо недостатки у статических методов?

    @D3lphi
    Значит так, берем толстую тетрадь, ручку и пишем фразу "Статические методы не имеют отношения к ООП" до тех пор, пока не запомним это на всю жизнь.
    Суть объектно ориентированного программирование, как понятно из названия, заключается в том, что должен существовать объект. Статика существует не в контексте объекта, а в контексте класса! Из этого вытекает то, что на протяжении всего жизненного цикла вашего кода будет существовать лишь одно глобальное состояние статических членов класса.

    Использовать статику нужно в случае, если то, что вы ей описываете принадлежит всей группе объектов, а не одному. Например, у класса Human может быть статический метод numberOfLegs(), который возвращает количество ног у людей. Количество ног - это общее свойство для всех людей (Речь идет о здоровых людях). В данном случае можно было использовать константу класса, но это не так важно, ведь, по сути, константа - это тоже статический контекст. А вот имя - это уже свойство каждого отдельного человека. И очень важно чтобы статические методы не изменяли состояние системы в целом, не содержали побочных эффектов.
    В статические методы можно выносить какую либо служебную логику. Например, метод перевода числа из арабской в римскую запись следует сделать статическим.

    Есть ли у статического варианта какие-то подводные камни

    Большое количество. При чем, не таких уж и подводных. Из-за того, что статика глобальна, она плохо поддается тестированию, ее нельзя замокать. Глобальное состояние плохо поддается отладке. Отсутствует возможность подменить реализацию, так как это позволяют сделать объекты.
    Ответ написан
    4 комментария
  • Как создать систему заданий в игре?

    yegorw
    @yegorw
    Analyst, Web-developer, Python, C#, Ruby
    Создай таблицу с столбцами как было сказано выше, к ней напиши класс с методами:
    1. Определение типа задания (купить, продать, поставить и.т.д), в зависимости от возвращенного значения напиши логику игрока для выполнения)
    2. Тип предмета для действия (тут все просто, будут хранится предметы: стулья, столы, и.т.д. и их количество для выполнения)
    3. Награда за выполнение задания.
    4. Количество предметов у игрока (все то же самое что и в столбце 3)
    5. Процесс выполнения (по желанию) в нём будут высчитываться сколько у игрока нужных предметов и в зависимости от их количества ставится % выполнения.

    Может ещё какие есть, не продумывал детально. Все эти столбцы обернуть методами взаимодействия между собой, для проверки выполнения, и так далее. Пиши, если будут вопросы.
    Ответ написан
    Комментировать
  • Как работает Timer в WPF?

    FirstX
    @FirstX
    .net developer
    Для общей справки в дополнение к первому ответу, есть грубо говоря 2 основных разновидности таймеров:

    1. System.Threading.Timer - Ставит задачу в пул потоков, поэтому подходит для тех, случаев, когда задача выполняется по таймеру в фоновом режиме. Например ваш объект изменяет параметр Х, но на форме этого не видно.

    2. System.Windows.Forms.Timer (для WinForms) / System.Windows.Threading.DispatcherTimer (WPF и Silvelight) и System.UI.XAML.DispatcherTimer для приложений Win Store еще есть - это все аналоги, которые вызывают исполнение метода в том же потоке, что и был вызван. Благодаря этому, обеспечивается доступ к элементам графического интерфейса, но при этом сюда лучше не помещать сложную вычислительную логику
    Ответ написан
    Комментировать
  • WPF DataGrid как выводить UnixTime?

    petermzg
    @petermzg
    Самый лучший программист
    Так используйте конвертеры при биндинге.
    Ответ написан
    5 комментариев
  • Как оптимизировать хранение большого количества объектов?

    arxont
    @arxont
    C# программист
    Виртуализация https://metanit.com/sharp/wpf/14.5.php
    Ответ написан
    Комментировать
  • Как посчитать количество дней до ближайшего 25 числа (месяца) в C#.NET?

    arxont
    @arxont
    C# программист
    static int DaysTill25(DateTime dt)
    {
       return dt.Day <= 25 ? 
                           25 - dt.Day
                         : 25 + (DateTime.DaysInMonth(dt.Year, dt.Month) - dt.Day);
    }
    Ответ написан
    Комментировать
  • Что изучать дальше в C#?

    Dyaminigo
    @Dyaminigo
    Изучаете, изучайте, но когда практиковать-то начнёте? Или хотите перезаписать всё Вами прочитанное за сегодня, прочитанным завтра?
    Начните разработку какой-нибудь многофункциональной проги, за время реализации функционала которой Вам не раз придётся перелопатить массу страниц в интернете, повстречаться со многими видами исключений и решать много возникающих проблем.
    Участвуйте в жизни Open Source проектов, к примеру, на том же GitHub.
    Без теории никуда, но и без практики тоже. Вы сюда почитать/посмотреть пришли или программировать?
    Поверьте, потребность реализовать ту или иную идею, лучше всего укажет Вам, что изучить.
    Если сомневаетесь, что готовы написать более или менее самостоятельную программку, даже с банальным выводом текста в консоль :), тогда подтяните базис, к примеру, на том же MyCsharp или Metanit.
    Ответ написан
    Комментировать
  • ASP.NET Core: чего нет в .Net Core в сравнении с .Net Framework?

    Valeriy1991
    @Valeriy1991
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    Добрый день! Из собственного опыта: в .NET Core отсутствует подсистема работы с графикой (System.Drawing, кажется). Т.е. если Вы вдруг на стороне сервера решите формировать, скажем, капчу, то у Вас это не получится. Также неполная поддержка рефлексии (в частности, отсутствует класс StackFrame).
    Ответ написан
    Комментировать
  • Как люди остаются незамеченными для ИК-КАМЕР?

    longclaps
    @longclaps
    Если сохраняешь хладнокровие - ИК-камеры тебя не заметят.
    Ответ написан
    Комментировать
  • cwRsync не хочет работать

    @zavant
    Несколько лет назад писал батник для бэкапа папки с рабочего компа на роутер. Подробностей уже не помню, но все работает и сейчас. Попробуйте с ключиками разобраться/поиграться.
    — set CYGWIN=codepage:utf8
    echo %DATE% %TIME% Starting %0 >> %temp%\backup.log
    rsync -e «ssh -p 12233 -l admin» -P -avz --delete --delete-after --rsync-path=/opt/bin/rsync /cygdrive/D/docs myrouter.dyndns.org:/home/backup/ 2>> %temp%\backup.log
    echo %DATE% %TIME% Done >> %temp%\backup.log
    exit
    --------------------------
    Ответ написан
    Комментировать
  • Почему прерывается передача данных при стабильном линке?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    Судя по графикам отваливаются клиенты. Отвал идет сразу у 3х клиентов разом или каком то одном?
    Как варианты возможного решения:
    1) Почистить логи и счетчики(очень редко но бывает что проблема тут кроется)
    2) Если не задан жестко канал и частота то задать. Возможно АР или клиенты пытаются спрыгнуть на менее зашумленный канал поэтому пробуй жестко задать везде одинаковую частоту и канал.
    3) Попробуй помониторь сигнал от АР в моменты провалов, не пропадает ли сигнал от нее. Возможно проблема железная и радиомудуль начал глючить.
    Ответ написан
    4 комментария
  • Почему прерывается передача данных при стабильном линке?

    Jump
    @Jump
    Системный администратор со стажем.
    Судя по описанию - перегруженный эфир.
    Появился сосед активно использующий WIFI.
    Ответ написан
    2 комментария
  • Возможно ли подключиться параллельно к порту RS-232 (RS-485)?

    @GreyPhantom
    АСУТП, КИПиА
    Насколько я понимаю- протокол у весов какой-то свой (от производителя), т.е придется работать ч/з их драйвер. А из описания драйвера следует, что терминал(весы) выдают данные по запросу компьютера- выходит что просто "сесть параллельно" на линию может не получится. Однако- в драйвере есть TCP/IP-сервер, через который можно отправить данные на другой компьютер по локальной сети. В документации к драйверу есть примеры работы. Там, правда, определенных знаний программирования потребуется, но не слишком сложно. Может этот вариант Вам подойдет? В крайнем случае- запросите поддержку у производителя...
    Касательно упомянутого конвертера- да, это преобразователь интерфейсов, с точки зрения компа (после запуска драйвера этого конвертера и подключения по Ethernet) - это будет один (или несколько) СОМ-порт, дальше работаем с ним как c обычным. Доступ с нескольких компов он позволяет (не во всех моделях, тут надо уточнить). И я не знаю- будет ли он работать с нестандартным протоколом.
    Ответ написан
    Комментировать