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

    @Jewish_Cat
    Увлекаюсь C#
    Тут два выхода:
    1)сделать бинд datasource на переменную и обновлять эту переменную, тогда не будет проблемы с потоками(нужно использовать MVVM)
    2)изменять datasource с помощью dispatcher
    Ответ написан
    7 комментариев
  • Рекурсивный метод для поиска наибольшего элемента массива?

    @Jewish_Cat
    Увлекаюсь C#
    Что за книга такая чудесная, которая учит писать код в одну строчку(я про конструкцию if)?
    Сейчас повнимательнее глянул, что в одном случае реализация такая себе, что и во втором случае.
    Хотя в первом случае рекурсия есть и проглядываются нотки логики, но моменты типа: list.Skip(1).Take(1).First() - это такой бред. Там же понятно, что перечисление из двух элементов. Зачем делать какое-то Skip(), Take(), если можно просто сделать Last()
    А насчет изучение алгоритмов - есть более хорошие книги, хоть и не на русском
    Ответ написан
  • Может ли юзер добавиться в дискорд сервер через код на C#(Discord.Net)?

    @Jewish_Cat
    Увлекаюсь C#
    Без участия пользователя он ни на какой сервер не добавится.
    Discord.net используется для написания ботов, не более того
    Ответ написан
  • Есть ли какие-нибудь тестовые задания на многопоточность и асинхронность, C#/ASP.NET?

    @Jewish_Cat
    Увлекаюсь C#
    Советую почитать: Конкурентность в C#. Асинхронное, параллельное и многопоточное программирование | Клири Стивен
    Ответ написан
    Комментировать
  • Почему не выделяется нужный Item из comboBox1, когда я нажимаю на кнопку?

    @Jewish_Cat
    Увлекаюсь C#
    В параметрах DataGrid есть параметр отвечающий за вид выделения: "Одна ячейка", "Целая строка" и т.п.
    Ответ написан
    Комментировать
  • Как реверсировать строку с помощью метода расширения?

    @Jewish_Cat
    Увлекаюсь C#
    for (int i = 0; i < arr.Length / 2; i++)
    {
       int tmp = arr[i];
       arr[i] = arr[arr.Length - i - 1];
       arr[arr.Length - i - 1] = tmp;
    }
    Ответ написан
  • Проблемы при реализации авторизации в режиме Forms в MVC 5?

    @Jewish_Cat
    Увлекаюсь C#
    Startup.cs покажи
    скорее всего не пропустил этап с роутингом
    Ответ написан
  • Не могу передать массив в другой класс Unity, а собстенно что не так?

    @Jewish_Cat
    Увлекаюсь C#
    Ну вот у тебя функция testFunc() есть, которая выгружает данные в твой массив.
    Но в твоём VisibleTest нет вызова этой функции. Следовательно и данных там не будет -_-
    Ответ написан
    Комментировать
  • IDE или редактор кода для C#?

    @Jewish_Cat
    Увлекаюсь C#
    VS Code
    Ответ написан
    Комментировать
  • Как создать на основе коллекции класса свойство в другом классе С#?

    @Jewish_Cat
    Увлекаюсь C#
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                var firstObject = new FirstClass();
                var secondObject = new SecondClass();
                var thirdObject = new ThirdClass();
    
                var list = new List<IParent>();
                list.Add(firstObject);
                list.Add(secondObject);
    
                thirdObject.Collection = list;
            }
        }
    
        /// <summary>
        /// Родительский интерфейс
        /// </summary>
        public interface IParent
        {
            
        }
        
        /// <summary>
        /// Класс наследуемый от родительского интерфейса
        /// </summary>
        public class FirstClass : IParent
        {
            
        }
    
        /// <summary>
        /// Класс наследуемый от родительского интерфейса
        /// </summary>
        public class SecondClass : IParent
        {
            
        }
    
        public class ThirdClass
        {
            public List<IParent> Collection { get; set; } = new List<IParent>();
        }
    }
    Ответ написан
    Комментировать
  • Как правильно сделать индексирование в entity framework?

    @Jewish_Cat
    Увлекаюсь C#
    Тут Efcore не причем. Efcore всего лишь переводит твой код в SQL запрос и отправляет в бд. Если тебе не нужно отслеживать ентити, то используй AsNoTracking(). Позволит тебе еще быстрее отработать.
    Тебе нужно бд оптимизировать.
    Как ты уже сказал, индекс правильная идея. Тебе нужно индексировать твой Name и Age. Тогда выборка данных будет существенней быстрее
    Ответ написан
  • Не работает Telegram Bot C# когда делаю в windows form, в консольном варианте никаких проблем нет. Что именно я делаю не так?

    @Jewish_Cat
    Увлекаюсь C#
    Bot.StartReceiving();
    Bot.StopReceiving();


    Зачем ты после запуска на прослушивания сообщений его сразу стопоришь?
    В этом и проблема
    Ответ написан
  • Как получить данные из DataGrid?

    @Jewish_Cat
    Увлекаюсь C#
    Сделай привязку данных.
    <DataGrid ItemsSource="{Binding CollectionTechWallets}"/>

    А в классе создай коллекцию, в которую ты будешь записывать получаемые данные.
    Но тебе придется еще реализовать интерфейс INotifyPropertyChanged для того, чтобы DataGrid знал, что твоя CollectionTechWallets изменилась и он автоматически обновит данные.
    Когда ты будешь в DataGrid изменять данные, то они автоматически изменятся в твоём CollectionTechWallets
    Ответ написан
    1 комментарий
  • Как связывать репозитории с ViewModel?

    @Jewish_Cat
    Увлекаюсь C#
    если ты про MVVM, то View взаимодействует с ViewModel, а ViewModel с Model. Поэтому если ты из ViewModel пытаешься работать с Model, чтобы просто получить данные и отправить на View, то всё окей. Но если ты во viewmodel производишь какие-либо "логические" операции, то неправильно
    Ответ написан
    2 комментария
  • Как обновить содержимое DataGrid?

    @Jewish_Cat
    Увлекаюсь C#
    datagrid.Items.Refresh();
    Ответ написан
    Комментировать
  • Как написать асинхронный конвеер на c#?

    @Jewish_Cat
    Увлекаюсь C#
    Посмотри DataFlow. Может это будет overkill, но для работы с изображением подходит на ура.
    BigInteger result = 0;
                var inputBlock = new BufferBlock<(string,string)>(); // Блок для входных данных
    
                var options = new ExecutionDataflowBlockOptions
                {
                    MaxDegreeOfParallelism = 200 // указываем сколько потоков будут обрабатывать наши данные
                };
    
                var callBalanceBlock = new TransformBlock<(string,string), BigInteger>(async x =>
                {
                    BigInteger wallet = await function.CallAsync<BigInteger>(x.Item1);
                    BigInteger eth = await Current.Eth.GetBalance.SendRequestAsync(x.Item1);
                    TechWallets.TechEURGWallets.Add(new TechWallet
                    {
                        Address = x.Item1, 
                        TokenValue = Web3.Convert.FromWei(wallet,2), 
                        EthValue = Web3.Convert.FromWei(eth, UnitConversion.EthUnit.Ether),
                        PrivateKey = x.Item2
                    });
                    return wallet;
                }, options); // Это главный испольнительный блок. Получает информация в виде (string,string) и отдает в формате BigInteger.
    
                var calc = new ActionBlock<BigInteger>(x => result += x, options); // Получает данные после работы TransformBlock, чтобы подсчитать число
    
                inputBlock.LinkTo(callBalanceBlock); // Прокидываем линк(соединение), что после BufferBlock, должен отрабатывать TransformBlock
                inputBlock.Completion.ContinueWith(task => callBalanceBlock.Complete());
    
                callBalanceBlock.LinkTo(calc); // Тоже самое, но для ActionBlock
                callBalanceBlock.Completion.ContinueWith(task => calc.Complete());
    
                foreach (var i in TechWallets.ListEURGTechWallets)
                    inputBlock.Post(i); // Заполняем наш BufferBlock входными значениями
    
                inputBlock.Complete(); // Запускаем работу наших блоков
    
                try
                {
                    calc.Completion.Wait(); // Ждем завершения работы последнего блока
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }

    Код станет проще намного и быстрее.
    Ты можешь построить свой конвеер по типу: BufferBlock(Массив входных данных) -> TransformBlock(Тут обрабатываешь входные картинки) -> ActionBlock(Тут заливаешь картинку на сервер)
    Ответ написан
  • Как перенести метод для кнопок в отдельный класс в WPF?

    @Jewish_Cat
    Увлекаюсь C#
    Изучай паттер MVVM и его используй.

    Пример:
    Код взял из боевого решения. Если будет непонятно, спрашивайте
    public partial class SetColdBalance : Window
        {
    
            public SetColdBalance()
            {
                InitializeComponent();
            }
        }

    public class RelayCommand<T> : ICommand
        {
            #region Fields
    
            readonly Action<T> _execute = null;
            readonly Predicate<T> _canExecute = null;
    
            #endregion
    
            #region Constructors
    
            /// <summary>
            /// Initializes a new instance of <see cref="DelegateCommand{T}"/>.
            /// </summary>
            /// <param name="execute">Delegate to execute when Execute is called on the command.  This can be null to just hook up a CanExecute delegate.</param>
            /// <remarks><seealso cref="CanExecute"/> will always return true.</remarks>
            public RelayCommand(Action<T> execute)
                : this(execute, null)
            {
            }
    
            /// <summary>
            /// Creates a new command.
            /// </summary>
            /// <param name="execute">The execution logic.</param>
            /// <param name="canExecute">The execution status logic.</param>
            public RelayCommand(Action<T> execute, Predicate<T> canExecute)
            {
                if (execute == null)
                    throw new ArgumentNullException("execute");
    
                _execute = execute;
                _canExecute = canExecute;
            }
    
            #endregion
    
            #region ICommand Members
    
            ///<summary>
            ///Defines the method that determines whether the command can execute in its current state.
            ///</summary>
            ///<param name="parameter">Data used by the command.  If the command does not require data to be passed, this object can be set to null.</param>
            ///<returns>
            ///true if this command can be executed; otherwise, false.
            ///</returns>
            public bool CanExecute(object parameter)
            {
                return _canExecute == null ? true : _canExecute((T)parameter);
            }
    
            ///<summary>
            ///Occurs when changes occur that affect whether or not the command should execute.
            ///</summary>
            public event EventHandler CanExecuteChanged
            {
                add { CommandManager.RequerySuggested += value; }
                remove { CommandManager.RequerySuggested -= value; }
            }
    
            ///<summary>
            ///Defines the method to be called when the command is invoked.
            ///</summary>
            ///<param name="parameter">Data used by the command. If the command does not require data to be passed, this object can be set to <see langword="null" />.</param>
            public void Execute(object parameter)
            {
                _execute((T)parameter);
            }
    
            #endregion
        }

    <Window x:Class="AdminTool.SetColdBalance"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
            xmlns:local="clr-namespace:AdminTool"
            mc:Ignorable="d"
            Title="Задать баланс"
            Height="150"
            Width="250"
            ResizeMode="NoResize"
            WindowStartupLocation="CenterScreen"">
        <Window.DataContext>
            <local:ColdWalletViewModel/>
        </Window.DataContext>
        <Grid>
         <Button Grid.Row="2" Width="100" Height="30" Content="Save" Command="{Binding SaveColdWallets}"/>
        </Grid>
    </Window>

    public class ColdWalletViewModel : BindableBase
        {
            ICommand _saveColdWallet;
            public ICommand SaveColdWallets
            {
                get
                {
                    return _saveColdWallet ?? (_saveColdWallet = new RelayCommand<object[]>((obj) =>
                    {
                       ///Тут пишешь что должна выполнять твоя кнопка
                    }), /*Тут можно написать условие при котором можно будет выполнить данную команду*/);
                }
            }
        }

    /// <summary>
        ///     Implementation of <see cref="INotifyPropertyChanged" /> to simplify models.
        /// </summary>
        public abstract class BindableBase : INotifyPropertyChanged
        {
            /// <summary>
            ///     Multicast event for property change notifications.
            /// </summary>
            public event PropertyChangedEventHandler PropertyChanged;
    
            /// <summary>
            ///     Checks if a property already matches a desired value.  Sets the property and
            ///     notifies listeners only when necessary.
            /// </summary>
            /// <typeparam name="T">Type of the property.</typeparam>
            /// <param name="storage">Reference to a property with both getter and setter.</param>
            /// <param name="value">Desired value for the property.</param>
            /// <param name="propertyName">
            ///     Name of the property used to notify listeners.  This
            ///     value is optional and can be provided automatically when invoked from compilers that
            ///     support CallerMemberName.
            /// </param>
            /// <returns>
            ///     True if the value was changed, false if the existing value matched the
            ///     desired value.
            /// </returns>
            protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
            {
                if (Equals(storage, value))
                {
                    return false;
                }
    
                storage = value;
                this.OnPropertyChanged(propertyName);
                return true;
            }
    
            /// <summary>
            ///     Notifies listeners that a property value has changed.
            /// </summary>
            /// <param name="propertyName">
            ///     Name of the property used to notify listeners.  This
            ///     value is optional and can be provided automatically when invoked from compilers
            ///     that support <see cref="CallerMemberNameAttribute" />.
            /// </param>
            protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
            {
                this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    Ответ написан
    5 комментариев
  • Как рассчитать Хеш сумму файла по средствам C#?

    @Jewish_Cat
    Увлекаюсь C#
    Как вариант забей на проверку хешей файлов. Это такое себе. Лучше шифровать информацию в файле игры.
    Смысл в чем? Если игру он не будет разбирать, то ты просто создаешь любой свой "строковый ключ" для шифрования. При выходе из игры, ты значение с "монетами" шифруешь и записываешь в файл. Если он захочет отредактировать, то ему придется помучиться в подборке алгоритма шифрования и дешифрования. Я тебе дал готовое решения для шифрования/дешифрования, только подставь свой ключ. Как вариант сгенерируй ключ через какой нибудь sha1 алгоритм.

    P.S. Откажись от шифрования используя MD5. Он намного медленее SHA1 и менее надежнее
    public static string keyStr = "ТУТ ЛЮБАЯ ТВОЯ СТРОЧКА(Любой рандомный текст)";
      
            public static string Encrypt(string PlainText)
            {
                RijndaelManaged aes = new RijndaelManaged();
                aes.BlockSize = 128;
                aes.KeySize = 256;
                aes.Mode = CipherMode.ECB;
    
                byte[] keyArr = Convert.FromBase64String(keyStr);
                byte[] KeyArrBytes32Value = new byte[32];
                Array.Copy(keyArr, KeyArrBytes32Value, 32);
    
                aes.Key = KeyArrBytes32Value;
    
                ICryptoTransform encrypto = aes.CreateEncryptor();
    
                byte[] plainTextByte = ASCIIEncoding.UTF8.GetBytes(PlainText);
                byte[] CipherText = encrypto.TransformFinalBlock(plainTextByte, 0, plainTextByte.Length);
                return Convert.ToBase64String(CipherText);
            }
            public static string Decrypt(string CipherText)
            {
                RijndaelManaged aes = new RijndaelManaged();
                aes.BlockSize = 128;
                aes.KeySize = 256;
                aes.Mode = CipherMode.ECB;
    
                byte[] keyArr = Convert.FromBase64String(keyStr);
                byte[] KeyArrBytes32Value = new byte[32];
                Array.Copy(keyArr, KeyArrBytes32Value, 32);
    
                aes.Key = KeyArrBytes32Value;
    
                ICryptoTransform decrypto = aes.CreateDecryptor();
    
                byte[] encryptedBytes = Convert.FromBase64CharArray(CipherText.ToCharArray(), 0, CipherText.Length);
                byte[] decryptedData = decrypto.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length);
                return ASCIIEncoding.UTF8.GetString(decryptedData);
            }
    Ответ написан
    Комментировать