• Стоит ли использовать Blazor?

    @caballero
    Программист
    Blazor позволяет не разделять сайт на две части фронтенд и бекенд чтобы потом соединять это через API - то есть выполнять лишнюю дурную работу

    сайт пишется как класческий сайт но работает как SPA
    с учетом что core.net ща кросплатформенный - у остальных технологий преимуществ немного.
    просто blazor еще новая необкатаная технология но перспективы неплохие
    Ответ написан
    2 комментария
  • Как правильно сравнивать ENUM на C#?

    @none7
    FileAttributes не является Enum в привычном смысле. Это битовая маска, то есть число в котором определенные биты имеют определенные значения. Пример откровенно говоря неправильный, так как в ожидаемые директории будет иметь ещё и атрибут Directory, как минимум. Если нужно найти все файлы имеющие один из атрибутов, то код должен выглядеть так
    if(dir.Attributes & (FileAttributes.Hidden | FileAttributes.Offline) != 0)

    Здесь мы складываем биты двух атрибутов и если любой из них не будет равен 0, то условие сработает.
    Ответ написан
    3 комментария
  • Язык программирования для любителя?

    Adler_lug
    @Adler_lug
    Зачем это вообще нужно под XP? Это уже лютый некрофилизм. Как в прочем и Windows 7 уже.
    Я бы смотрел только на Windows 10-11 (хотя последняя пока под большим вопросом, но все равно на нее смотреть поидетсч) и .Net 5-6 в "исполнении" C#.
    Ответ написан
    1 комментарий
  • Как реализовать "отдачу" нужной версии сайта?

    NeiroNx
    @NeiroNx
    Программист
    Речь идет про IIS как я понял.
    Создай правило переопределения адресов в условиях добавь {HTTP_user-agent} по шаблону .*Mobile.* (все мобильные агенты должны содержать слово Mobile)
    <rule name="test" enabled="false">
     <match url="(.*)" />  
      <conditions>
       <add input="{HTTP_user-agent}" pattern=".*Mobile.*" />
      </conditions>
      <action type="Redirect" url="/mobile.html" />
    </rule>
    Ответ написан
    1 комментарий
  • Исключение не обработано, как исправить?

    vabka
    @vabka Куратор тега .NET
    Токсичный шарпист
    В классе general_form я создаю экземпляр ReadyLoad.

    Это и повлияло.
    Ошибка "System.StackOverflowException" говорит о том что у тебя переполнился стек.
    Стек имеет ограниченные размеры, и каждый раз, когда вызывается функция - из него выжирается кусок, а когда функция завершается - этот кусок освобождается

    А теперь о произошедшей ситуации:
    Класс ReadyLoad после компиляции превращается вот в это:
    internal class ReadyLoad {
      private general_form gm_Link;
      public ReadyLoad() {
        gm_Link = new general_form();
      }
    }

    Конструктор - это тоже функция.
    Соответственно, когда вызывается конструктор new ReadyLoad - внутри него вызывается new general_form(), а внутри него также вызывается конструктор new ReadyLoad() и так, пока стек не переполнится.
    Когда стек переполняется - твоя программа убивается.

    В твоём случае необходимо от этого цикла избавиться)
    Как именно - зависит от случая.

    PS: О том, что такое стек можешь почитать тут: https://metanit.com/sharp/tutorial/2.16.php
    Ответ написан
    9 комментариев
  • Блокировать ли tcpclient.stream?

    Nipheris
    @Nipheris Куратор тега C#
    Алгоритм получения ответа на ваш вопрос, которым я воспользовался и также советую вам:
    1. Идем смотрим какой тип стрима возвращает TcpClient.GetStream(). Тип стрима - NetworkStream.
    2. Переходим по ссылке на NetworkStream и спускаемся к секции Thread Safety - она есть у всех классов, это стандартный элемент документации. Там написано:
    Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
    Т.е. сказано, что потокобезопасными являются только статические методы. Эта фраза встречается у большинства классов, т.к. большинство не проектировались специально для многопоточной работы. Вот concurrent-коллекции - это другое дело, у них так и написано (очередь):
    All public and protected members of ConcurrentQueue are thread-safe and may be used concurrently from multiple threads.
    Что логично, т.к. в межпотоковых блокировках весь смысл этой очереди, в отличие от обычной.
    Учтите, что тот факт что только одним потоком вы читаете, а другим пишете, вовсе не значит, что они не будут мешать друг-другу. Например, и чтение и запись могут менять какие-либо внутренние указатели и индексы (номер текущего байта или сколько еще непрочитанных байт осталось), о которых вы и знать не можете. Поэтому всегда идем в документацию и проверяем, что там.
    Ответ написан
    2 комментария