Ответы пользователя по тегу C#
  • Как прослушать звук с микрофона на наушниках?

    @nightwolf_du
    5 лет опыта. c#, js, sql.
    Коли гнезда разные - посмотрите куда-нибудь вот сюда
    https://github.com/naudio/NAudio/blob/master/Docs/...
    и вот сюда Как одновременно вывести звук на два устройства? , похожий пример, но с выводом
    Ответ написан
    Комментировать
  • Существует ли в контексте ASP.NET MVC такое понятие как события?

    @nightwolf_du
    5 лет опыта. c#, js, sql.
    Вы хотите странного.
    Классический веб-сервер работает только по пинку с клиента запросом, отдавая на него какой-то response.
    Если вы хотите с сервера что-то запушить на клиент - вам надо смотреть с сторону WebSockets(правильно, но достаточно сложно) - смотрите сюда https://habr.com/post/145077/
    Либо периодически опрашивать клиентом сервер через ajax и держать какой-то статический кэш событий, проверяя его на request-е.(вариант "в лоб", не очень правильно, но быстро в реализации)
    Ответ написан
    2 комментария
  • Стоит ли в данном случае использовать табличные функции вместо LINQ to SQL?

    @nightwolf_du
    5 лет опыта. c#, js, sql.
    По опыту - sql нотация в linq - большое зло. Страшно, непонятно, не код и не sql-запрос.
    Многими правилами оформления кода это запрещено.

    Плюс первый запрос я бы вообще переписал на хранимку в случае более чем 100к записей в базе.
    Ответ написан
    Комментировать
  • Как заблокировать переход на новую строку по нажатию Enter в RichTextBox(multiline)?

    @nightwolf_du
    5 лет опыта. c#, js, sql.
    Единственный способ, который приходит мне на ум, является сильно не простым.
    Определите, на какой/какие из эвентов (KeyPress, KeyDown, KeyUp, PreviewKeyDown) приходится данное действие, после чего

    1) снимите все дефолтные обработчики рефлекшеном,
    2) обрабатывайте их вручную.

    Снять обработчик можно например таким кодом (пример для события Click, соответственно для ваших строковая контанта EventClick поменяется, нужно поле отвечающее за ваши эвенты )
    вместо panel1 - соответственно ваш richTextBox:
    FieldInfo f1 = typeof(Control).GetField("EventClick", BindingFlags.Static| BindingFlags.NonPublic);
    object obj = f1.GetValue(panel1);
    PropertyInfo pi = panel1.GetType().GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance);
    EventHandlerList list = (EventHandlerList)pi.GetValue(panel1, null);
    list.RemoveHandler(obj, list[obj]);


    чтобы не писать после этого вручную всю обработку нажатия клавиш - можно попробовать поискать в EventHandlerList list нужный вам event handler, обрабатывающий пробел, но это довольно сложно, и не факт что вся логика связанная с нажатием клавиш - помещена не в один метод.
    Чтобы разобраться лучше - смотрите исходники richTextBox
    Ответ написан
    2 комментария
  • Как параллельно выполнять функции на C#?

    @nightwolf_du
    5 лет опыта. c#, js, sql.
    самый простой вариант - попробуйте вызвать без await, т.е.
    var task1 = Func1();
    var task2 = Func2();
    Затем подождите асинхронно завершения всех тасков
    await Task.WhenAll(task1, task2, task3);
    И делайте с результатами что хотите. Результат можете брать хоть await task1, хоть task1.Result (аналогично с остальными task)

    Function1 в таком варианте может исполняться синхронно до первого await (точнее могу сказать подняв книгу, которую и вам рекомендую - Дэвис Д. - Асинхронное программирование в C# 5.0 - 2013 )

    А так есть куча способов параллельного исполнения - от брутального старта нового потока new Thread(<делегат>).Start() и записи куда-нибудь в общую память, старенького Parallel.ForEach до Task.Factory.StartNew()
    Ответ написан
    Комментировать
  • .NET неоправдано сжирает память?

    @nightwolf_du
    5 лет опыта. c#, js, sql.
    Сборщик будет отдавать память, когда у программы будет простой и/или системе она(память) потребуется и/или в системе будет доступно менее некоторого % памяти.
    По графику вызова GC, он вызывался только в самом начале.

    Если хотите другого поведения - вынесите выделение и использование массива в функцию, и крутите в цикле функцию, при этом поставьте у gc параллельную серверную сборку. Тогда выброшенные фреймы стека с указателем на ваш старый byte[] должны быстро подбираться параллельной сборкой мусора, приложение начнет интенсивнее отдавать память.
    Соответствующие флаги в appConfig-е

    https://msdn.microsoft.com/ru-ru/library/ms229357(...
    https://msdn.microsoft.com/ru-ru/library/ms229357(...
    Ответ написан
    Комментировать