Ответы пользователя по тегу C#
  • Альтернатива CRON для приложения ASP.NET Core Web API под виндой?

    @Sterk
    Программист
    Сам использую Quartz.net
    Так же еще в список добавлю Hangfire
    Ответ написан
    Комментировать
  • Определить тип анонимности прокси?

    @Sterk
    Программист
    Добрый день, я честно говоря не понял откуда и что идет в вашем алгоритме.
    Когда я делал аналогичную задачу, я ее делал так:
    - сделал сайт который возвращал JSON со всеми полями пришедшего запроса
    - так же в JSON добавил статичный GUID
    - делал запросы через прокси к своему сайту
    - проверял наличие GUID, некоторые прокси возвращают вообще левый html
    - проверял наличие своего IP в ответе. прямо string,contains. потому что мне все равно в каком из заголовков он может засветиться (если IP есть - Transparent)
    - проверял наличие заголовков соответсвующих различным proxy (есть заголовки Anonymous)
    - ничего из перечисленного - Elite

    PS: ужасный код: one0, one1, one2, one3, one4, one5
    Ответ написан
    2 комментария
  • Да в чем проблема?

    @Sterk
    Программист
    Я сделал небольшой пример как лучше оформлять код и именовать переменные:
    Пример
    Ответ написан
    Комментировать
  • Что нужно установить для разработки на C# из под Ubuntu 16.04?

    @Sterk
    Программист
    Я бы предложил использовать virtualbox, windows и полноценную VS. Так как в visual studio code нет поддержки больших решений. Как редактор он мне очень нравится, но пихать все в один проект становится неудобно как только вы собираетесь делать что то крупное. А запускать сможете на том же линуксе, у меня работает :)
    Ответ написан
    Комментировать
  • Инсталлятор для своего приложения со встроенным дистрибутивом .NET?

    @Sterk
    Программист
    Inno Setup. Пример скрипта:
    ; Script generated by the Inno Script Studio Wizard.
    ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
    
    #define MyAppName "Моя программа"
    #define MyAppVersion "1.6.2.0"
    #define MyAppPublisher "ООО Бирюльки"
    #define MyAppURL "http://www.example.com/"
    #define MyAppExeName "NameOfMainExeFile.exe"
    #define SetupName "setup_my_programm"
    
    [Setup]
    ; NOTE: The value of AppId uniquely identifies this application.
    ; Do not use the same AppId value in installers for other applications.
    ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
    AppId={{390B67EF-46E4-45B6-B6F9-C9C6362FE337}
    AppName={#MyAppName}
    AppVersion={#MyAppVersion}
    ;AppVerName={#MyAppName} {#MyAppVersion}
    AppPublisher={#MyAppPublisher}
    AppPublisherURL={#MyAppURL}
    AppSupportURL={#MyAppURL}
    AppUpdatesURL={#MyAppURL}
    DefaultDirName="{pf}\MyProgramm"
    DefaultGroupName={#MyAppName}
    OutputBaseFilename={#SetupName}{#MyAppVersion}
    Compression=lzma
    SolidCompression=yes
    
    [Languages]
    Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
    
    [Tasks]
    Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
    
    ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
    
    [Files]
    Source: "{#SourcePath}NDP461-KB3102436-x86-x64-AllOS-ENU.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall; Check: not DotNetFrameworkIsInstalled
    Source: "{#SourcePath}DopCalc\bin\Release\MyProgramm.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "{#SourcePath}DopCalc\bin\Release\MyProgramm.exe"; DestDir: "{app}"; Flags: ignoreversion
    Source: "{#SourcePath}DopCalc\bin\Release\MyProgramm.exe.config"; DestDir: "{app}"; Flags: ignoreversion
    Source: "{#SourcePath}DopCalc\bin\Release\GalaSoft.MvvmLight.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "{#SourcePath}DopCalc\bin\Release\System.Web.Razor.xml"; DestDir: "{app}"; Flags: ignoreversion
    Source: "{#SourcePath}DopCalc\bin\Release\System.Windows.Interactivity.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "{#SourcePath}DopCalc\bin\Release\Templates\*"; DestDir: "{app}\Templates"; Flags: ignoreversion createallsubdirs recursesubdirs
    
    [Icons]
    Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
    Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
    
    [Run]
    Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
    Filename: "{tmp}\NDP461-KB3102436-x86-x64-AllOS-ENU.exe"; Parameters: "/passive /showfinalerror /norestart /x86 /x64"; Check: not DotNetFrameworkIsInstalled; StatusMsg: Microsoft Framework 4.6.1 устанавливается. Пожалуйста подождите... 
    
    [Code]
    function DotNetFrameworkIsInstalled(): Boolean;
    var
      bSuccess: Boolean;
      regVersion: Cardinal;
    begin
      Result := False;
      bSuccess := RegQueryDWordValue(HKLM, 'Software\Microsoft\NET Framework Setup\NDP\v4\Full', 'Release', regVersion);
      if (True = bSuccess) and (regVersion >= 394254) then begin
        Result := True;
      end;
    end;


    В функции проверки установлен ли .NET нужно будет заменить 394254 на код вашей версии .NET: MSDN
    Ответ написан
    Комментировать
  • Как изменить интервалы осей Chart?

    @Sterk
    Программист
    Предполагаю ответов нет потому, что никто не знает что вы используете WinForms\WPF\Web?
    Могу предложить пару хороших библиотек для первых двух: OxyPlot и более молодой проект LiveCharts
    Ответ написан
    Комментировать
  • Что из себя представляет пул подключений к БД?

    @Sterk
    Программист
    В .net пул подключений реализован скрыто. Когда вы вызываете new XxxConnection(Sql,MySql и т.д.) подключение либо создается если нет свободных либо берется из пула. Поэтому, наверное, стоит создавать подключение каждый раз когда оно нужно и оборачивать в конструкцию using.
    Вот ссылка на msdn
    Ответ написан
    Комментировать
  • Как реализовать автоматически запускаемую программу сразу после окончания загрузки Windows 10?

    @Sterk
    Программист
    Лучший вариант использовать Windows Service. Для .net C# есть замечательная библиотека Topshelf.
    Ответ написан
    Комментировать
  • ASP.NET Core должен быть медленный?

    @Sterk
    Программист
    Абсолютно ничего не сказано о настройке asp.net core. Могу посоветовать выключить логирование в консоль. Сделать релизную версию и запускать отдельно от студии.
    Ответ написан
    Комментировать
  • Как обмануть оптимизатор C#?

    @Sterk
    Программист
    Понятно что проблему можно решить по другому, но мне кажется вам стоит посмотреть в сторону CancellationTokenSource.
    Ответ написан
    Комментировать
  • Как найти максимальное и минимальное значение C#?

    @Sterk
    Программист
    Ох уж эти студенты, как вы работать потом собираетесь?
    using System;
    using System.Linq;
    using System.Collections.Generic;
    					
    public class Program
    {
    	public static void Main()
    	{
    		string[] dayOfWeek = new string[] { "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье" };
    		
    		Console.WriteLine("Введите температуру воздуха за неделю: ");
    		
    		var temp = new List<int>();
    		var r = new Random();
    		
    		foreach(var day in dayOfWeek){
    		//	Console.Write("{0,-12}: ", day);
    		//	temp.Add(Convert.ToInt32(Console.ReadLine()));
    			temp.Add(r.Next(-10,10));
    		}
    		
    		Console.WriteLine(string.Join(", ", temp));
    		Console.WriteLine();
    		//Для обычных людей
    		Console.WriteLine("Средняя температура за неделю: {0} градусов", temp.Average());
    		Console.WriteLine("Максимальная температура: {0} градус(-ов)", temp.Max());
    		Console.WriteLine("Минимальная температура: {0} градус(-ов)", temp.Min());
    		Console.WriteLine();
    		//Для студентов
    		{
    			double sum = 0;
    			for(int i = 0; i < temp.Count; i++){
    				sum += temp[i];
    			}
    			Console.WriteLine("Средняя температура за неделю: {0} градусов", sum / temp.Count);
    		}
    		{
    			int pos = 0, max = temp[0];
    			for(int i = 1; i < temp.Count; i++){
    				if(max < temp[i]){
    					pos = i;
    					max = temp[i];
    				}
    			}
    			Console.WriteLine("Максимальная температура: {0} градус(-ов) позиция {1}", max, pos+1);
    		}
    		{
    			int pos = 0, min = temp[0];
    			for(int i = 1; i < temp.Count; i++){
    				if(min > temp[i]){
    					pos = i;
    					min = temp[i];
    				}
    			}
    			Console.WriteLine("Минимальная температура: {0} градус(-ов) позиция {1}", min, pos+1);
    		}
    		
    	}
    }
    Ответ написан
    Комментировать
  • Как из списка базового класса сделать список наследуемового класса?

    @Sterk
    Программист
    Создать в классе B конструктор принимающий класс А и инициализирующий свои поля значениями из А. Затем
    var listB = listA.Select(a=>new B(a)).ToList();
    Ответ написан
    1 комментарий
  • Какой язык выбрать под Backend высоконагруженного rest-сервиса?

    @Sterk
    Программист
    Голос за C#. Да он не такой быстрый как C++. Но он довольно быстр. Если вы собираетесь выпустить новую версию к лету или позднее можно присмотреться к новому asp.net core mvc. на гитхабе есть бенчмарки(только не смотрите на asp.net mvc 5 он уныл в этом плане). Внизу страницы есть "Plain Text with HTTP Pipelining", как мне кажется очень показательный. Да пока что линукс проседает(при этом все равно оставаясь быстре node.js, который быстрее php), но это дело времени. По поводу того что скала пока что быстрее, два месяца назад asp.net core выдавал в этих тестах 200-300к(на windows). На будущее(год-два) майкрософт пилит компиляцию в нативный код на разных платформах(пока что это работает только на HelloWorld).
    Ответ написан
    Комментировать
  • Как можно через raw ado в vnext подключится к mysql серверу?

    @Sterk
    Программист
    В данный момент нет официального порта mysql коннектора для coreclr. Вы можете попробовать собирать под полноценный .net framework или под моно. При этом подключить обычный mysql коннектор. Либо попробовать postgresql
    Ответ написан
  • Какие плюсы и минусы у различных подходов в работе с диалоговыми окнами в WPF MVVM?

    @Sterk
    Программист
    С чего вы взяли что это подходы для работы с диалогами?
    Messenger - паттерн для передачи сообщений(событий) из одной вью модели в другую.
    Service Dialog - сервис который создает разные диалоговые окна?
    Dependency Injection - одна из реализаций принципа Inversion of Control (инверсия управления). Например вашей MainViewModel надо использовать Messenger и ServiceDialog. Тогда вы делаете инъекцию зависимостей, например, через конструктор.
    public MainViewModel(Messenger messenger, ServiceDialog serviceDialog){...}

    IoC-контейнер подставит зависимости сам.
    Так я определяю сказанные вами понятия. Теперь вопрос - что мешает использовать это все вместе?
    Ответ написан
    3 комментария
  • Как открыть и масштабировать изображение BitmapImage?

    @Sterk
    Программист
    у BitmapImage есть DecodePixelWidth, DecodePixelHeight размер для конвертации.
    var uri = value as string;
                if (string.IsNullOrWhiteSpace(uri))
                    return null;
                var image = new BitmapImage();
                image.BeginInit();
                image.UriSource = new Uri(uri);
                if (Width != null)
                    image.DecodePixelWidth = (int)Width;
                if (Height != null)
                    image.DecodePixelHeight = (int)Height;
                image.EndInit();
                return image;

    Либо можно задавать размер контролу, а не источнику, мне кажется это ваш случай.
    var uri = value as string;
                if (string.IsNullOrWhiteSpace(uri))
                    return null;
                var source = new BitmapImage(new Uri(uri));
                var image = new Image { Source = source };
                if (Width != null)
                    image.Width = (int)Width;
                if (Height != null)
                    image.Height = (int)Height;
                return image;

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

    @Sterk
    Программист
    Я бы посоветовал вам узнать про dependency injection. С использованием его все становится гораздо проще.
    Приведу пример организации проекта:
    1 Модуль описание интерфейсов для работы
    interface ICore {...}
    interface IDeviceManager {...}

    у этого модуля не должно быть зависимостей
    я думаю в нем же можно объявить структуры данных, но у них так же не должны быть зависимостей от других модулей программы
    2 Модуль ядро - в нем должна быть реализована вся логика работы с приборами(или еще чем то) как сервис
    class Core : ICore {...}
    class DeviceManager : IDeviceManager{...}

    этот модуль в зависимостях должен иметь только модуль 1
    он должен быть автономным - работать в потоках
    3 Модуль Gui - здесь есть варианты, но объединяет их одно - использование шаблона проектирование "внедрение зависимостей". Вот сравнение контейнеров. Я использую LightInject он быстр и прост.
    Метод запуска окошек с контейнером на примере LightInject.
    допустим у вас есть главное окно и окно с приборами
    public partial class MyMainForm
    {
        private LightInject.IServiceContainer _container;
        public MyMainForm(LightInject.IServiceContainer container)
        {
            _container = container;
        }
        public void ShowDeviceWindow()
        {
             var form = _container.Create<MyDeviceForm>();
             form.Show();
        }
    }
    public partial class MyDeviceForm
    {
        private IDeviceManager _deviceManager;
        public MyDeviceForm(IDeviceManager devicemanager)
        {
            _deviceManager = devicemanager;
        }
        public void ButtonClick()
        {
         // Здесь вы делаете все что хотите и работаете с менеджером
        // Например загружаете список приборов в лист
        foreach(var device in _deviceManager.GetDevices())
            listBox.Add(device.ToString());
        }

    для того что бы не создавать все объекты и зависимости окнам руками используем контейнер
    если вы используете WinForms то скорее всего это надо прописать в programm.cs
    var container = new LightInject.ServiceContainer();
    container.RegisterInstance<IServiceContainer>(container);
    container.Register<ICore, Core>(new PerContainerLifetime());
    container.Register<IDeviceManager, DeviceManager>(new PerContainerLifetime());
    var form = container.Create<MyMainForm>();
    //Не помню как выводятся окна в WinForms
    //Но логика надеюсь понятна
    form.Show();

    Таким образом у нас любое окно может запросить любой нужный ему интерфейс для работы с ядром\логикой.
    Что бы в каждое окно не совать IServiceContainer я бы создал IWindowManager в реализации которой получал бы контейнер и выводил окно что то вроде manager.ShowWindow<MyDeviceForm>(); и всем окнам подсовывал бы его. Так проще контролировать создание окон.
    Для WPF я бы мог посоветовать глянуть различным MVVM фрейворки Calibrun.Micro, Catel и тд.
    Есть даже модульная система выглядящая как IDE gemini
    Не знаю чем обусловлен выбор WinForms, но для него тоже есть фреймворки, но вроде бы в них применяется шаблон MVP.
    Для своих нужд я написал клон gemini со своим видением некоторых моментов. Надеюсь это поможет в разделение логики и окон, несколько лет назад я так же искал информацию как же вообще строить окна, но подсказать было некому.

    PS: код набирал в текстовом редакторе, могут быть опечатки и неточности.
    Ответ написан
    Комментировать
  • Как решить данную задачу?

    @Sterk
    Программист
    вот самое простое решение

    var list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    PrintList(list);
    bool delete = false;
    while (list.Count > 1)
    {
        for (int i = 0; i < list.Count; i++)
        {
            if (delete) list.RemoveAt(i--);
            delete = !delete;
        }
        PrintList(list);
    }
    Console.Read();

    функция печати
    static void PrintList(IEnumerable<int> list)
    {
        foreach (var item in list)
            Console.Write("{0} ", item);
        Console.WriteLine();
    }
    Ответ написан
    Комментировать