Задать вопрос
Ответы пользователя по тегу C#
  • Как в runtime вставить в метод код, рефлексия, кодогенерация?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    https://learn.microsoft.com/en-us/dotnet/api/syste...

    using System;
    					
    public class Program
    {
    	delegate void MyFunc();
     
    	public static void FuncA(){     
    		Console.WriteLine("FuncA");
    	}
    
    	public static void FuncB(){    
    		Console.WriteLine("FuncB");
    	}
    	
    	public static void Main()
    	{
    		MyFunc Func = FuncA;
    		Func();
    		Func = FuncB;
    		Func();
    	}
    }

    FuncA
    FuncB
    Ответ написан
  • Как изменить цвет ComboBox wpf c#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Серьезно что-ли? Документацию открыть религия не позволяет? https://docs.microsoft.com/en-us/dotnet/api/system... -> Ctrl+F -> Color
    Ответ написан
    Комментировать
  • Как понять какой код сейчас выполняют потоки?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    А расход памяти смотрели? Похоже на утечки памяти и уход системы в глубокий свап. Что показывает менеджер задач? Нормальный - типа ProcessExplorer, а не встроенный. Еще могут быть зависшие потоки, которые чего-то там ждут - например, потерянного ответа на сетевой запрос. Надеюсь, все сетевые запросы идут с таймаутом? А еще могут быть какие-то косяки в используемых либах. Как тут уже сказали - добавляйте логирование как минимум в ключевых местах, а как максимум - везде и всюду и потом уже разбирайте логи и ищите где именно проблема.
    Ответ написан
    6 комментариев
  • Как исправить данную ошибку в VS windows forms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    https://dev.mysql.com/doc/connector-net/en/connect...
    ---------------------------↓↓↓
    "server=127.0.0.1;uid=root;pwd=12345;database=test"
    Ответ написан
    1 комментарий
  • Не запускается приложение Windows Forms после его сборки. Что делать?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    C 95% вероятностью отсутствующие библиотеки, конфиги, зависимости или сам .Net на другой машине, а в коде приложения нет проверок/обработки ошибок загрузки библиотек/конфигов/зависимостей. Проверить список зависимостей приложение и их присутствие на целевой машине, добавить обработку не обработанных исключений и логирование запуска приложения на разных этапах для понимания в какой момент происходит ошибка/падение.
    Ответ написан
    Комментировать
  • Как отобразить несколько контролов одновременно?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Просто используйте WPF - там нет таких проблем с производительностью. У WinForms проблема с производительностью связана с использованием древнего GDI API. И, если хочется решить эту проблему - то в таком случае надо вручную писать рендеры для контролов. В данном случае это будет так: создать кастомный контрол и написать к нему кастомный рендер, который будет брать картинки и копировать их всех в один канвас/буфер, так же в самом этом контроле обрабатывать события пользовательского ввода. Плюс потребуется найти и применить дополнительные хаки для повышения производительности, такие как добавление специальных флагов стилей к окну, переписывание дополнительных методов в контролах и прочее. Проверено на личном опыте.
    Ответ написан
    2 комментария
  • Как зашифровать пароль?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Если задача в хранении пароля в памяти в зашифрованном виде, то обычно делается так:
    Using System.Net;
    
    SecureString SecurePassword = new NetworkCredential(string.Empty, "password").SecurePassword;
    string PlainPassword = new NetworkCredential(string.Empty, SecurePassword).Password;
    Ответ написан
    Комментировать
  • Есть ли готовые решения для рендеринга HTML в десктопном приложении?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Конечно — браузер называется. В WPF есть WebView. Еще есть всякие NWJS и Electron.
    Ответ написан
    Комментировать
  • Почему так медленно работает цикл?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    GetPixel для одиночных пикселей и работает медленно — поэтому для низкоуровеновой работы с изображениями не подходит. Правильное решение выглядит примерно вот так:
    https://stackoverflow.com/questions/24701703/c-sha...
    public class DirectBitmap : IDisposable
    {
        public Bitmap Bitmap { get; private set; }
        public Int32[] Bits { get; private set; }
        public bool Disposed { get; private set; }
        public int Height { get; private set; }
        public int Width { get; private set; }
    
        protected GCHandle BitsHandle { get; private set; }
    
        public DirectBitmap(int width, int height)
        {
            Width = width;
            Height = height;
            Bits = new Int32[width * height];
            BitsHandle = GCHandle.Alloc(Bits, GCHandleType.Pinned);
            Bitmap = new Bitmap(width, height, width * 4, PixelFormat.Format32bppPArgb, BitsHandle.AddrOfPinnedObject());
        }
    
        public void SetPixel(int x, int y, Color colour)
        {
            int index = x + (y * Width);
            int col = colour.ToArgb();
    
            Bits[index] = col;
        }
    
        public Color GetPixel(int x, int y)
        {
            int index = x + (y * Width);
            int col = Bits[index];
            Color result = Color.FromArgb(col);
    
            return result;
        }
    
        public void Dispose()
        {
            if (Disposed) return;
            Disposed = true;
            Bitmap.Dispose();
            BitsHandle.Free();
        }
    }
    Ответ написан
    Комментировать
  • Как рендерить HTML/CSS в .net/C# для desktop?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    NWJS еще есть.
    Ответ написан
    Комментировать
  • Что выводит лямбда-выражение?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    В месте ошибки правильнее примерно так:
    var index = spisok.FindIndex(s => s.zachetka == zachetka);

    В целом же правильнее будет сделать вот так:
    static ExamPass FindZachetka(List<ExamPass> spisok, string zachetka)
    {
        return spisok.Find(s => s.zachetka == zachetka);
    }
    Ответ написан
    2 комментария
  • Как реализовать лучше взаимодействие C# Forms приложение с браузером CefSharp и сайтом в нем?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Лучше всего использовать NWJS для таких задач.
    Ответ написан
    Комментировать
  • Изменение стиля ComboBox WinForm C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Если нужна глубокая кастомизация элементов управления — используйте WPF. Он и быстрее и гибче (требования к ОЗУ вырастут не сильно, по сравнению с формами).
    Ответ написан
    4 комментария
  • Где в MVVM разместить глобальный класс?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Тут два варианта: создать статический класс и в нем ссылку на экземпляр класса для работы с устройством и второй вариант — просто передавать требуемый класс в параметрах конструктора каждой VM.
    Ответ написан
    4 комментария
  • Как сравнивать версии моей программы на c#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    /// <summary>
    /// Version
    /// </summary>
    public class Version : IComparable<Version>
    {
        /// <summary>
        /// Major version
        /// </summary>
        public readonly int Major = 0;
        /// <summary>
        /// Minor version
        /// </summary>
        public readonly int Minor = 0;
        /// <summary>
        /// Build number
        /// </summary>
        public readonly int Build = 0;
        /// <summary>
        /// Revision
        /// </summary>
        public readonly int Revision = 0;
    
        private readonly int hash;
    
        /// <summary>
        /// Version
        /// </summary>
        /// <param name="version"></param>
        public Version(string version)
        {
            string[] versions = version.Split('.');
    
            if (versions == null)
            {
                throw new Exception("Can't parse version from string: " + version);
            }
    
            if (versions.Length != 4)
            {
                throw new Exception("Can't parse version from string — wrong count of numbers: " + version);
            }
    
            if (int.TryParse(versions[0], out int major))
            {
                Major = major;
            }
            else
            {
                throw new Exception("Can't parse major version from string: " + versions[0]);
            }
    
            if (int.TryParse(versions[1], out int minor))
            {
                Minor = minor;
            }
            else
            {
                throw new Exception("Can't parse minor version from string: " + versions[1]);
            }
    
            if (int.TryParse(versions[2], out int build))
            {
                Build = build;
            }
            else
            {
                throw new Exception("Can't parse build version from string: " + versions[2]);
            }
    
            if (int.TryParse(versions[3], out int revisison))
            {
                Revision = revisison;
            }
            else
            {
                throw new Exception("Can't parse revisison version from string: " + versions[3]);
            }
    
            hash = ToString().GetHashCode();
        }
    
        /// <summary>
        /// Versions compare
        /// </summary>
        /// <param name="other"></param>
        /// <returns></returns>
        public int CompareTo(Version other)
        {
            if (Major > other.Major) { return 1; }
            if (Major < other.Major) { return -1; }
            // Major == other.Major
            if (Minor > other.Minor) { return 1; }
            if (Minor < other.Minor) { return -1; }
            // Minor == other.Minor
            if (Build > other.Build) { return 1; }
            if (Build < other.Build) { return -1; }
            // Build == other.Build
            if (Revision > other.Revision) { return 1; }
            if (Revision < other.Revision) { return -1; }
            // Revision == other.Revision
            return 0;
        }
    
        /// <summary>
        /// Bigger?
        /// </summary>
        /// <param name="left"></param>
        /// <param name="right"></param>
        /// <returns></returns>
        public static bool operator >(Version left, Version right)
        {
            return left.CompareTo(right) == 1;
        }
    
        /// <summary>
        /// Less?
        /// </summary>
        /// <param name="left"></param>
        /// <param name="right"></param>
        /// <returns></returns>
        public static bool operator <(Version left, Version right)
        {
            return left.CompareTo(right) == -1;
        }
    
        /// <summary>
        /// Bigger or equal?
        /// </summary>
        /// <param name="left"></param>
        /// <param name="right"></param>
        /// <returns></returns>
        public static bool operator >=(Version left, Version right)
        {
            return left.CompareTo(right) >= 0;
        }
    
        /// <summary>
        /// Less or equal?
        /// </summary>
        /// <param name="left"></param>
        /// <param name="right"></param>
        /// <returns></returns>
        public static bool operator <=(Version left, Version right)
        {
            return left.CompareTo(right) <= 0;
        }
    
        /// <summary>
        /// Convert version to string
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return string.Format("{0}.{1}.{2}.{3}", Major, Minor, Build, Revision);
        }
    
        /// <summary>
        /// Get hash
        /// </summary>
        /// <returns></returns>
        public override int GetHashCode()
        {
            return hash;
        }
    }
    Ответ написан
    Комментировать
  • Как выполнить выгрузку информации по классу по определённому правилу?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    1. Документируете код согласно принятым стандартам, типа такого:
      /// <summary>
      /// Class description
      /// </summary>
      public class SomeClass { }

    2. В параметрах проекта на вкладке "Сборка" ставите галочку "XML-файл документации — далее файл документации можно скормить любому приложению/скрипту, понимающему xml.
    3. Далее ставите приложение Doxygen
    4. В doxygen создаете проект документации, указываете xml файл документации и все требуемые настройки и сохраняете проект в файл
    5. Теперь документацию по всему коду в удобном формате (HTML, LaTeX, RTF, Man, XML, DocBook) можно получить просто выполнив команду:
      doxygen.exe doxyproject
    Ответ написан
    4 комментария
  • Как разместить нужные компоненты на странице компонента tabControl в MS VisualStudio 2017?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Очень просто: добавляем на форму табконтрол, а в там контрол добавляем кнопку.
    Ответ написан
  • C# Как отсортировать символы вставкой?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    1. Сопоставляем каждому символу во второй строке число-индекс этого символа;
    2. По каждому символу в первой строке ищем тот же символ во второй строке и сопоставляем текущему символу число индекс второго символа;
    3. Удаляем из второй строки найденный символ — т.е. символы повторяются нужно сопоставить символы один к одному;
    4. Сортируем первую строку по номерам символов — при условии совпадения числа одинаковых символов в строках, результат будет соответствовать второй строке.
    Ответ написан
  • Копирование объекта или передача ссылки на него?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Читайте мануал по IEquatable интерфейсу: https://docs.microsoft.com/en-us/dotnet/api/system...
    Данный интерфейс реализует методы сравнения определенного класса. Кроме того, класс так же может реализовывать поддержку сравнения для операторов (равно, не равно, больше/меньше и т.п.).
    Ответ написан
    Комментировать