Ответы пользователя по тегу C#
  • Async-await и Task.wait() В чем разница?

    @carbon88
    .NET developer/ORM developer
    Task.Wait() будет блокировать вызывающий поток, а await не будет этого делать.
    Так называемый continuation (то что ниже await) будет выполнен после завершения таска, что ожидается через await. При этом вызывающий поток блокироваться не будет и сможет выполнить еще какую-то работу, например, среагировать на нажатие кнопки если это основной поток GUI приложения или если это асп.нет приложение он сможет начать обрабатывать следующий запрос.
    Как только таск выполнится начнется исполнение continuation и в некоторых случаях не гарантируется что это будет тот же поток в котором выполнялся код до await.
    Ответ написан
    Комментировать
  • Как остановить выполнение асинхронной операции?

    @carbon88
    .NET developer/ORM developer
    берете, создаете CancellationTokenSource, далее из него берете токен. его можно передать в таск. но сам токен не остановит выполнение таска. он так сказать пробрасывает информацию о том что была запрошена отмена операции внутрь таска. далее вы в своем коде можете проверить отменили ли задачу и прекратить ее исполнение. на кнопку отмены загрузки нужно повесить вызов CancellationTokenSource.Cancel() но именно того сорца что вы создали раньше для токена переданного в загрузку файла.
    Ответ написан
  • Как часто Вы разбиваете описание одного класса на несколько файлов через partial?

    @carbon88
    .NET developer/ORM developer
    Разбиваем. Ничего плохого не вижу, все зависит от класса, как и везде главное не переборщить.

    У нас есть классы, которые берут на себя много работы и, соответственно, в них много кода. его нужно как-то группировать по функциям. тут либо делать region-ы либо распихать по файлам и обозначить класс как partial

    приведу простой пример когда я бы разделил. есть класс, у него есть какие-то методы отвечающие за работу, свойства, поля и сравнительно большое количество event-ов. вероятность того что эти самые эвенты будут часто просматривать не очень велика, в основном смотрят методы потому что в них основная работа. соответственно чтобы эти эвенты глаза не мозолили их можно:
    1) запихать в region и свернуть. но! это дело у кого-то будет свернуто у кого-то нет, при поиске по файлу регион, опять таки, может быть развернут и его опять нужно свернуть. неудобненько.
    2) договориться убирать эти эвенты в самый конец файла. но! они же когда-нибудь могут понадобится и листать в конец не очень приятно.
    3) сделать класс partial и переместить часть с эвентами в отдельный файл. в какой нибудь SuperAwesomeClass.Events.cs. что мы этим добьемся? расчистим основной файл от редко просматриваемых членов класса, группируем некий код по смыслу, получаем быстрый доступ к эвентам если нам понадобится в них заглянуть и они точно будут все и в одном месте.

    но это лишь мое имхо.
    Ответ написан
    Комментировать
  • C#. Почему нельзя обратиться к классу другого проекта, если в том проекте нет метода Main ()?

    @carbon88
    .NET developer/ORM developer
    Смотрите, я вижу две ситуации
    1) Проект А это приложение то есть имеет расширение EXE. Проект Б это подключаемая библиотека то есть dll.
    2) Проект А и проект Б это оба приложения то есть имеют расширение EXE. (предполагаю у вас именно так).

    Чтобы ОС могла запустить приложение она должна найти в нем метод MAIN с определенной сигнатурой. Это так сказать общая точка входа, и поэтому во втором случае оба проекта должны иметь этот метод.

    Давайте я вам немножко доп. инфы про .net отсыплю. Дело в том что в .NET и .exe и .dll файлы это сборки и они имеют практически идентичную структуру, различие только в том что в валидной .exe сборке обязательно есть этот самый метод MAIN.
    я может сейчас взорву вам мозг, но проект приложения может использовать ссылки и на .dll и на .exe .net-сборки и я очень даже уверен что смогу зареференсить .exe сборку в проект .dll сборки. такие вот дела

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

    вы легко можете сменить тип одного из проектов на библиотеку классов и будет вам счастье.
    Ответ написан
    1 комментарий
  • Как посчитать до какого значения заполнен массив по каждому из измерений?

    @carbon88
    .NET developer/ORM developer
    Пробежаться по массиву и проверить что там заполнено. Тут есть два варианта, бежать сначала и искать первый незаполненный или бежать с конца и искать первый заполненный. выбирайте стратегию сами.
    Тут еще вопрос каким образом идет запись - рандомно, в любую клетку так сказать, или последовательно.
    Если рандомно, то скорее всего нужно брать вариант просмотра с конца. Если последовательно, то тут вообще можно без обхода обойтись, запоминая максимальный индекс(ы) по которому(ым) произвелась запись.
    Ответ написан
    Комментировать
  • Необработанное исключение типа "System.OutOfMemoryException" в mscorlib.dll. Что делать?

    @carbon88
    .NET developer/ORM developer
    1)Вы уверены что у вас элементов будет меньше чем int.MaxValue?
    2)Выкиньте в топку этот List, можно оставить только если вам заранее известно количество элементов и вы можете инициализировать maxCapacity сразу. если нет то выкидывайте однозначно. Дело в том, что после 4-ой вставки (если мне не изменяет память) при каждой следующей вставке элемента Capacity увеличивается вдвое, соответственно массив элементов который там внутрях тоже увеличивается вдвое и элементы перегоняются в новый. представляете с какой скоростью растет массив? то есть на i = 33554433 + 1 list.Add() будет пытаться выделить кусок под 67108866 элементов, а это нужен непрерывный кусок памяти который к тому времени наверняка не находится и все падает с OutOfMemoryException. кстати же еще нужно хранит массив с которого будем копировать в тот который копируем. это огромная трата памяти. жесть просто.

    Не знаю что у вас за код, который использует результат метода Time, но если там всего лишь перебор то этот ваш алгоритм это просто жесть, и наверняка можно вообще не использовать внутренний список, а выдавать посчитанное значение по мере необходимости через yield return и вычислять на лету.
    Ответ написан
    1 комментарий
  • Как правильно обратиться к элементу массиву??

    @carbon88
    .NET developer/ORM developer
    У вас Items это List. Эта коллекция позволяет обращаться к элементам по индексу, то есть Items[0].asr. В чем проблема?
    Ответ написан
  • Не выходит получить тип через Reflection. Возвращается пусттая ссылка. Как пофиксить?

    @carbon88
    .NET developer/ORM developer
    Попробуйте все же использовать AssemblyQualifiedName, а не просто полное имя типа и имя сборки.

    Как добиться того, чтобы t содержал ссылку на StorageManager?

    На объект StorageManager или ссылку на объект Type соответствующий типу StorageManager?
    Ответ написан
  • Как обратиться к уже открытой форме?

    @carbon88
    .NET developer/ORM developer
    Все просто. Любое событие принимает объект, который вызвал срабатывание события и некоторые аргументы. Вам нужно что-то типа вот такого
    private void Keyboard_FormClosing(object sender, FormClosingEventArgs e)
    {
      var closingForm = sender as Form1;// пытаемся преобразовать к Form1
      if (closingForm!=null)//если sender это объект класса Form1 или его наследника
          closingForm.webKitBrowser.StringByEvaluatingJavaScriptFromString("");
      // sender не объект класса Form1 или его наследника
    }


    Ну вот как-то так
    Ответ написан
    Комментировать
  • Не работает GC в приложении, что делать?

    @carbon88
    .NET developer/ORM developer
    Там находятся кешированные данные, которые теоретически могут быть использованы заново. На просторах интернета нашлись упоминания о программе под названием RamMap. Она поможет определить ресурсы, загаживающие память. Кстати GC тут не причем, конечно если у вас код чтения не кривой и все высвобождается корректно. За кешированные в памяти данные ведь отвечает ОС, а не GC.
    Ответ написан
  • Правильно ли Entity Framework создал модель?

    @carbon88
    .NET developer/ORM developer
    Правильно. Он все понял и сделал как вам надо и чтобы вы не напрягались.
    Ответ написан
    Комментировать
  • Как привязаться (binding) к перечислению (enum), исключив ненужные элементы?

    @carbon88
    .NET developer/ORM developer
    думаю можно сформировать нужный список значений и прибиндить уже его.

    1)Enum.GetValues(typeof (T)) - получите все значения из Enum.
    2)Enum.GetValues(typeof (T)).Cast() - получите IEnumerable
    3 ) тут с помощью, например, Where() отфильтруйте ненужные значения
    4) сформируйте List с помощью ToList()

    и его и используйте в ComboBox
    Ответ написан
    Комментировать
  • Unique id как получить действительно уникальный под wp8 ~ wp8.1?

    @carbon88
    .NET developer/ORM developer
    Ответ написан
    Комментировать
  • Как лучше проверять значения в конфигах?

    @carbon88
    .NET developer/ORM developer
    Я немного не понял. Это ваши настройки или вы настройки стороннего приложения(или библиотеки) мониторите?
    Если ваши, то на С# было бы правильным сделать ConfigurationElement-ы какие-нибудь и на основе них читать из конфига значения. А еще можно на основе этих элементов строить конфигурации настроек и передавать их где они нужны для настройки. На вашем D не знаю как и что.
    Ответ написан
  • Как открыть исходник мобильного приложения (C#) в Microsoft Visual Studio Express 2013?

    @carbon88
    .NET developer/ORM developer
    есть несколько версий VS Express:
    1) для Web-а Express 2013 for Web;
    2) для Phone and Store (Express 2013 for Windows)
    3) для Desktop (Express 2013 for Desktop)

    скорее всего у вас третья, а нужна вторая
    Ответ написан
    2 комментария
  • Как остановить выполнение кода и продолжить его после определенных условий?

    @carbon88
    .NET developer/ORM developer
    а чем вам Form.ShowDialog() не угодил?

    "Имеется возможность использовать этот метод для отображения модального диалогового окна в приложении. При вызове этого метода код, следующий за ним, не выполняется до тех пор, пока диалоговое окно не будет закрыто." (с) MSDN
    Как раз то что вам нужно, не?
    Ответ написан
  • Как задаются атрибуты в C#?

    @carbon88
    .NET developer/ORM developer
    по мне так 1 и 4 верны
    1) как продемонстрировал yamaoto в своем примере, в секции могут быть как несколько атрибутов так и один (как удобно разработчику)
    2) думаю что особой роли в порядке нету (ну может кроме порядка вызова конструкторов). в итоге если атрибут объявлен у типа или поля, то он будет. а как его обработать уже решает поставщик этого атрибута.
    3) опять же по примеру yamaoto видно, что у одного поля (или класса) могут быть несколько секций.
    4) опять верно (см пример на который я все время ссылаюсь, еще раз благодарим yamaoto за него :))
    Ответ написан
  • Где искать ошибку в коде на C#?

    @carbon88
    .NET developer/ORM developer
    по-видимому где-то метод Main возвращает какое-то значение.
    Ответ написан
    Комментировать
  • Как оптимизировать код?

    @carbon88
    .NET developer/ORM developer
    Добавлю свою ложку дегтя плюсом к предыдущим ответам

    1) query.Count() > 0 если это метод из Linq а не определенный в классе то лучше так не делать. Он переберет весь IEnumerable, а оно вам надо? Если нужно проверить есть ли в последовательности элементы используйте query.Any()

    2)в if-ах можно определить только запрос. а далее просто
    if (query.Any())
    {
       ViewData["uncheckedProfiles"] = query.ToPagedList(pageNumber, pageSize);
    }
    else
    {
       ViewData["uncheckedProfilesSearch"] = "NoResult";
    }

    или

    3) думаю можно что-то сделать с вашими ToUpper(). например почему бы сразу не привести все что нужно (если оно нужно) к верхнему регистру и не делать лишних операций. потому что судя по описанию на MSDN ToUpper() выдает копию строки, то есть это как минимум каждый раз инициализация переменной и копирование из одной переменной в другую. А вообще почитайте про работу со строками с точки зрения внутреннего устройства, например рихтера "CLR via C#"

    4) вообще судя по вашему запросу у вас рознится только часть Where. в остальном это один и тот же Linq. То есть можно написать все красивее, пошагово определив все состовляющие.

    var query = MongoDBInstance.GetMongoDatabase.GetCollection<User>("UserInfo")
        .AsQueryable<User>();
    if (!string.IsNullOrEmpty(searchByName)) {
        var upperCaseSearchString = searchByName.ToUpper()
        string[] names = upperCaseSearchString.Split(' ');
        if (names.Length > 1) {
             query = query.Where(i=>
                                !i.IsActivated && ((
                                    i.Name.ToUpper().Contains(names[0]) &&
                                    i.LastName.ToUpper().Contains(names[1])) ||
                                (i.Name.ToUpper().Contains(names[1]) &&
                                 i.LastName.ToUpper().Contains(names[0]))));
        }
        else {
            query = query.Where(i=>
                                !i.IsActivated && (
                                    i.Name.ToUpper().Contains(upperCaseSearchString) ||
                                    i.LastName.ToUpper().Contains(upperCaseSearchString)));
              
        }
    }
    else {
        query = query.Where(i=>!i.IsActivated);
    }
    query = query.OrderBy(i=>i.ID);
    if (query.Any()) {
        ViewData["uncheckedProfiles"] = query.ToPagedList(pageNumber, pageSize);
    }
    else {
        ViewData["uncheckedProfilesSearch"] = "NoResult";
    }


    За скобки не ручаюсь, писал прям в редакторе тостера
    Ответ написан
    2 комментария
  • Как правильно переустановить .NET Framework 4.0 на сборках Windows 7?

    @carbon88
    .NET developer/ORM developer
    ну так пользователь сам дурак значит, раз использует паленые сборки Windows. Кто знает как там реестр подправили и что с ними наделали вообще. Он должен понимать что делает это на свой страх и риск и что что-то может пойти не так. вот у него тот случай когда что-то идет не так.

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

    судя по этому проблема может быть вовсе не в фреймворке.
    Ответ написан