• Почему не открывается диалог WPF?

    @Sumor
    В целом, то что вы закрыли диалог совершенно не означает, что ваша длительная операция прервалась.
    backgroundWorker.CancelAsync(); всего лишь информирует задачу, что её прерывают. Внутри обработчика backgroundWorker должна быть специальная проверка свойства CancellationPending, при установке которого нужно выполнять выход из потока обработки.
    Закрытие формы не уничтожает поток с задачей - она будет выполняться, пока не дойдёт до конца.
    Скорее всего при повторном открытии формы у вас происходит конфликт с ресурсами, которые уже используются первым потоком обработки.

    Если смотреть дальше, то если вы выполняете длительную операцию на сервере, например, длительную хранимую процедуру, то даже закрытие приложения, которое запустило на выполнение эту хранимку, не гарантирует остановку процесса на сервере. Особенно, если процесс изменяет данные. В зависимости от логики сервера процесс может продолжиться до победного конца, может прерваться в какой-нибудь ключевой момент или уйти в длительный откат изменений, чтобы привести всё в состояние до запуска хранимки.
    Ответ написан
    Комментировать
  • Алгоритм для транспортной задачи?

    Для небольшого количества машин и событий решается динамическим программированием на графе событий.
    Для большого количества - точного решения нет, но очень неплохо зарекомендовали генетические алгоритмы (результат субоптимален с ошибкой не более 3% от оптимального).
    Ответ написан
    4 комментария
  • Java - вывод неправильного результата?

    @Power
    Отличный выбор точек! Они лежат на одной прямой, так что площадь действительно равна 0.
    Ответ написан
    Комментировать
  • Как задать Placeholder для TextBox в среде VisualStudio 2013 язык C#?

    lam0x86
    @lam0x86
    Если WinForms, то, начиная с WinXP в ОС встроена поддержка данной фичи, и называется это Cue Banners. Здесь написано, как это можно прикрутить: stackoverflow.com/a/4902969

    Если WPF, то можно посмотреть здесь: stackoverflow.com/a/833967
    Ответ написан
    Комментировать
  • Почему приложение на C# съедает в 5 раз больше ожидаемого объема памяти?

    @asvishnyakov
    Программист
    1. List<> выделяет память кусками «про запас». Это называется capacity и отвечает за него одноимённое свойство. Если вы знаете, что ваш список в среднем будет содержать не больше N элементов, то это N нужно передать в соответствующий конструктор List<>.
    2. Можно подсчитать байты и использовать выравнивание. Процесс трудоёмкий, но если сейчас много «пустого места», то в итоге вполне могут выйти желанные ~80МБ.
    3. Ну и упомянутые утечки памяти. GC.Collect и memory profiling вам в помощь.

    Ну а людям ноющим о медленности «управляемых» языков, больших DLL и 100 МБ памяти для .NET по-умолчанию и предлагающих перейти на другие языки, я предлагаю пойти поучиться у англоязычных коллег, которые не ноют по каждому случаю, а стараются действительно помочь разобраться в проблеме, в данном случае — увеличить производительность. Извините, накипело.
    Ответ написан
    Комментировать
  • Почему sizeof(System.Char) == 2, а Marshal.SizeOf(System.Char) == 1?

    NekitoSP
    @NekitoSP
    msdn.microsoft.com/en-us/library/eahchzkf.aspx
    Marshal.SizeOf returns the size after the type has been marshaled, whereas sizeof returns the size as it has been allocated by the common language runtime, including any padding.

    и:
    msdn.microsoft.com/en-us/library/vstudio/5s4920fa(...
    The size of the specified type in unmanaged code.

    т.е. sizeof - размер типов в CLR, а Marshal.SizeOf - размер типа в unmanaged коде.

    И по первой ссылке есть пометка по этому поводу:
    Although you can use the Marshal.SizeOf method, the value returned by this method is not always the same as the value returned by sizeof.
    Ответ написан
    Комментировать
  • Какими стандартными средствами можно реализовать получение почты на C#?

    aush
    @aush
    Для отправки писем есть System.Net.Mail.SmtpClient, для получения такого нет. Пользуйтесь OpenPop.NET.

    var client = new POPClient();
    client.Connect("pop.gmail.com", 995, true);
    client.Authenticate("admin@bendytree.com", "YourPasswordHere");
    var count = client.GetMessageCount();
    Message message = client.GetMessage(count);
    Console.WriteLine(message.Headers.Subject);


    Еще можно на MailSystem.NET посмотреть.
    Ответ написан
    Комментировать
  • Почему значение переменной не меняется?

    Illivion
    @Illivion
    Запустил ваш проект, каретка двигается. Даже не знаю, что и сказать. :)
    Ответ написан
    1 комментарий
  • Как нарисовать правильный многоугольник С#?

    @Igor_Sib
    Чтобы получить вершины - от начальной точки откладываешь отрезок радиусом R, скажем вправо - это первая вершина, потом поворачиваешь на угол (360/N, где N - число углов), получаешь координаты второй вершины, потом поворачиваешь ещё на столько же - получаешь координаты третьей, и т.д. Я бы сделал так.
    Ответ написан
    1 комментарий
  • Странная, зависящая от версии .NET Framework, проблема со сборкой мусора?

    @mayorovp
    А что тут странного? GC вам ничем не обязан, если объект перешел в следующее поколение - Collect его может проигнорировать.

    Попробуйте GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, true);
    Ответ написан
    1 комментарий
  • Помогите определиться с архитектурой библиотеки управления цветом на C#

    ostapbender
    @ostapbender
    Единый immutable класс Color, который конвертирует во все представления «на лету»

    class Color
    {
        private Rgb rgb;
        private Lab lab;
    
        public Rgb Rgb
        {
            get { return rgb ?? (rgb == ToRgb(this)); }
        }
    
        public Lab Lab
        {
            get { return lab ?? (lab == ToLab(this)); }
        }
    
        public static Color FromRgb(int r, int g, int b)
        {	
        }
    
        public static Color FromHsv(...)
        {	
        }
    
        public static Color FromLab(...)
        {	
        }
    
        private static Rgb ToRgb(Color c)
        {	
        }
    
        private static Lab ToLab(Color c)
        {	
        }
    }
    


    И потом реализации всяких операций используют то представление, в котором им удобнее работать:

    class ColorOperations
    {
        public static Color Darken(Color c, float amount)
        {
            // Тут выгоднее использовать c.Hsv
        }
    
        public static Color Sharpen(Color c, float amount)
        {
            // А тут выгоднее использовать c.Lab
        }
    }
    
    Ответ написан
    Комментировать