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

    @cicatrix
    было бы большой ошибкой думать
    Вот где неправильно:
    FileStream inp_f = new FileStream(name_f1, FileMode.Create);

    Замените FileMode.Create на FileMode.Open
    Режим Create создаёт новый файл, поток открывается на запись, а не на чтение.

    EDIT: Поправил опечатку (MSDN)
    Ответ написан
    8 комментариев
  • Как правильно считать из XML?

    @cicatrix
    было бы большой ошибкой думать
    Как-то так.
    public class XmlEntry
    {
        public DateTime Date { get; set; }
        public float[] Values { get; set; }
    } // class XmlEntry
    
    public IEnumerable<XmlEntry> ReadFile(string filename)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(filename);
        return doc.SelectNodes("dataset/data/datum") // Здесь возможно подредактировать путь надо, у вас XML обрезан
            .OfType<XmlElement>()
            .Select(e => new XmlEntry
            {
                Date = DateTime.Parse(
                    e.ChildNodes.OfType<XmlElement>()
                    .Where(cn =>
                        cn.Attributes["type"].Value.Equals("date")).FirstOrDefault().InnerText),
                Values =
                    e.ChildNodes.OfType<XmlElement>()
                    .Where(cn =>
                        cn.Attributes["type"].Value.Equals("float"))
                        .Select(node => float.Parse(node.InnerText, System.Globalization.CultureInfo.InvariantCulture))
                        .ToArray()
            }); 
    } // ReadFile
    Ответ написан
  • Как создать такую форму на C# (не WPF) (перенос из DevelNext)?

    @cicatrix
    было бы большой ошибкой думать
    А в чём проблема? Вот, набросал за пару минут:
    ozHaspD.png

    Код из Form1.Designer.cs
    namespace FormLoginDemo
    {
        partial class Form1
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Windows Form Designer generated code
    
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.txtLogin = new System.Windows.Forms.TextBox();
                this.label1 = new System.Windows.Forms.Label();
                this.label2 = new System.Windows.Forms.Label();
                this.txtPassword = new System.Windows.Forms.TextBox();
                this.button1 = new System.Windows.Forms.Button();
                this.label3 = new System.Windows.Forms.Label();
                this.lnkReg = new System.Windows.Forms.LinkLabel();
                this.SuspendLayout();
                // 
                // txtLogin
                // 
                this.txtLogin.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                this.txtLogin.Font = new System.Drawing.Font("Arial", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
                this.txtLogin.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
                this.txtLogin.Location = new System.Drawing.Point(71, 97);
                this.txtLogin.Margin = new System.Windows.Forms.Padding(6);
                this.txtLogin.Name = "txtLogin";
                this.txtLogin.Size = new System.Drawing.Size(298, 35);
                this.txtLogin.TabIndex = 0;
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
                this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
                this.label1.Location = new System.Drawing.Point(67, 71);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(59, 20);
                this.label1.TabIndex = 1;
                this.label1.Text = "Логин:";
                // 
                // label2
                // 
                this.label2.AutoSize = true;
                this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
                this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
                this.label2.Location = new System.Drawing.Point(67, 143);
                this.label2.Name = "label2";
                this.label2.Size = new System.Drawing.Size(71, 20);
                this.label2.TabIndex = 3;
                this.label2.Text = "Пароль:";
                // 
                // txtPassword
                // 
                this.txtPassword.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                this.txtPassword.Font = new System.Drawing.Font("Arial", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
                this.txtPassword.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
                this.txtPassword.Location = new System.Drawing.Point(71, 169);
                this.txtPassword.Margin = new System.Windows.Forms.Padding(6);
                this.txtPassword.Name = "txtPassword";
                this.txtPassword.PasswordChar = '•';
                this.txtPassword.Size = new System.Drawing.Size(298, 35);
                this.txtPassword.TabIndex = 2;
                // 
                // button1
                // 
                this.button1.BackColor = System.Drawing.Color.Black;
                this.button1.FlatAppearance.BorderColor = System.Drawing.Color.DimGray;
                this.button1.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Gray;
                this.button1.FlatAppearance.MouseOverBackColor = System.Drawing.Color.White;
                this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
                this.button1.Font = new System.Drawing.Font("Arial", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
                this.button1.ForeColor = System.Drawing.Color.White;
                this.button1.Location = new System.Drawing.Point(71, 233);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(130, 45);
                this.button1.TabIndex = 4;
                this.button1.Text = "Войти";
                this.button1.UseVisualStyleBackColor = false;
                // 
                // label3
                // 
                this.label3.AutoSize = true;
                this.label3.Font = new System.Drawing.Font("Arial", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
                this.label3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
                this.label3.Location = new System.Drawing.Point(29, 25);
                this.label3.Name = "label3";
                this.label3.Size = new System.Drawing.Size(198, 27);
                this.label3.TabIndex = 5;
                this.label3.Text = "Авторизация ^_^";
                // 
                // lnkReg
                // 
                this.lnkReg.ActiveLinkColor = System.Drawing.Color.CornflowerBlue;
                this.lnkReg.AutoSize = true;
                this.lnkReg.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
                this.lnkReg.ForeColor = System.Drawing.Color.CornflowerBlue;
                this.lnkReg.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
                this.lnkReg.LinkColor = System.Drawing.Color.CornflowerBlue;
                this.lnkReg.Location = new System.Drawing.Point(240, 246);
                this.lnkReg.Name = "lnkReg";
                this.lnkReg.Size = new System.Drawing.Size(100, 18);
                this.lnkReg.TabIndex = 6;
                this.lnkReg.TabStop = true;
                this.lnkReg.Text = "Регистрация";
                this.lnkReg.VisitedLinkColor = System.Drawing.Color.CornflowerBlue;
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.BackColor = System.Drawing.Color.White;
                this.ClientSize = new System.Drawing.Size(562, 374);
                this.ControlBox = false;
                this.Controls.Add(this.lnkReg);
                this.Controls.Add(this.label3);
                this.Controls.Add(this.button1);
                this.Controls.Add(this.label2);
                this.Controls.Add(this.txtPassword);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.txtLogin);
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
                this.Name = "Form1";
                this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
                this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            private System.Windows.Forms.TextBox txtLogin;
            private System.Windows.Forms.Label label1;
            private System.Windows.Forms.Label label2;
            private System.Windows.Forms.TextBox txtPassword;
            private System.Windows.Forms.Button button1;
            private System.Windows.Forms.Label label3;
            private System.Windows.Forms.LinkLabel lnkReg;
        }
    }
    Ответ написан
    Комментировать
  • Как предоставлять правильный доступ к protected полям в таком случае?

    @cicatrix
    было бы большой ошибкой думать
    Вообще вызов расчёта из геттера свойства - плохо. И ваша - лишь одна из причин.
    С моей точки зрения, поддержка актуального состояния класса - задача самого класса. Если требуется пересчёт, то его надо выполнять при изменении состояния класса (в момент изменения параметров для пересчёта), а не при первой попытке считывания результата (впрочем, случаи разные бывают).
    Во вторых, naming convention - все локальные поля должны отличаться от имени внешних свойств. Я, например, все локальные переменные класса снабжаю префиксом m_ (в вашем примере это будет m_Bar.
    Ответ написан
    3 комментария
  • Какая архитектура должна быть у такой попытки?

    @cicatrix
    было бы большой ошибкой думать
    Читайте документацию

    This event is only raised if the message pump is running. In a Windows service, unless a hidden form is used or the message pump has been started manually, this event will not be raised. For a code example that shows how to handle system events by using a hidden form in a Windows service, see the SystemEvents class.


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

    @cicatrix
    было бы большой ошибкой думать
    public class XmlEntry
    {
        public string Name { get; set; }
        public string Mode { get; set; }
        public string Path { get; set; }
    } // class XmlEntry
    
    public IEnumerable<XmlEntry> ReadFile(string filename)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(filename);
        return doc.SelectNodes("/Backup/Bases/Base")
            .OfType<XmlElement>()
            .Select(e => new XmlEntry
            {
                Name = e.Attributes["Name"].Value,
                Mode = e.Attributes["MODE"].Value,
                Path = e.Attributes["Path"].Value
            }); // Добавить валидацию, если атрибуты не обязательны
    } // ReadFile
    Ответ написан
    Комментировать
  • Как enum'у назначить regex "любое число"(См.описание)?

    @cicatrix
    было бы большой ошибкой думать
    Алексей Немиро абсолютно верно заметил, что
    В перечислениях допустимы только целочисленные значения (byte, sbyte, short, ushort, int, uint, long и ulong), либо char.


    Но можно схитрить, создав структуру или класс, содержащую набор строковых констант (особого смысла для компилятора в этом нет, но для читаемости кода и последующей поддержки - очень удобно):
    struct STRING_ENUMERATION
    {
        public const string ENUM_A = "Это строка перечисления";
        public const string ENUM_B = "Это другая строка перечисления";
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            string myVar = STRING_ENUMERATION.ENUM_A;
        }
    }
    Ответ написан
    Комментировать
  • Вызов функции Windows Forms вне класса Формы?

    @cicatrix
    было бы большой ошибкой думать
    Вот здесь ваша проблема подробно описана.
    Вкратце: для вызова метода формы из другого потока, необходимо вызывать её через механизм Invoke. Вот пример оттуда:
    public static void InvokeIfRequired(this ISynchronizeInvoke obj,
                                             MethodInvoker action)
    {
        if (obj.InvokeRequired) {
            var args = new object[0];
            obj.Invoke(action, args);
        } else {
            action();
        }
    }

    где action() - ваш метод
    Ответ написан
    Комментировать
  • Почему вылетает исключение при попытке объявить SQLiteConnection?

    @cicatrix
    было бы большой ошибкой думать
    Что за исключение, какое сообщение об ошибке?
    Сейчас попробовал "пустой проект" с одной строкой:
    SQLiteConnection connection = new SQLiteConnection();

    Никаких исключений не возникло.
    Ответ написан
  • Использование итераторов foreach?

    @cicatrix
    было бы большой ошибкой думать
    Интерфейсы нужны для того, чтобы с вашими собственными классами могли работать другие классы.
    Например, вы реализовали собтсвенную коллекцию объектов со своей странной логикой. Допустим, вы хотите, чтобы по этой коллекции можно было бы пройтись циклом foreach, но изначально фрейморк понятия не имеет, каким образом осуществлять итерацию объектов внутри вашей коллекции. Вот тогда вы заявляете, что ваш класс реализует интерфейс IEnumerable, и предоставляет наружу реализацию этого интерфейса. Вот тогда фреймворк уже знает, как можно перебрать все элементы коллекции.
    IEnumerable реализует и массив и список и словарь и связный список, то есть для того, чтобы вы могли пройтись по какому-либо классу при помощи foreach, этот класс обязан реализовывать IEnumerable. Считайте интефейс это "соглашение о сотрудничестве" между разными классами, в котором чётко определены правила взаимодействия.
    Ответ написан
  • Как сделать код C# WindowsForms чтобы при нажатии button1 масив записывается в файл который он автоматически создает и наоборот вытаскивался?

    @cicatrix
    было бы большой ошибкой думать
    protected void Button1_Click(object sender, EventArgs e)
    {
        string[] array = { "раз", "два", "три" };
        System.IO.File.WriteAllLines("file.txt", array);
    }
    
    protected void Button2_Click(object sender, EventArgs e)
    {
        string[] array = System.IO.File.ReadAllLines("file.txt");
    }
    Ответ написан
  • Как правильно распараллеливать выполнение цикла "For"?

    @cicatrix
    было бы большой ошибкой думать
    Race Condition по всей видимости. Добро пожаловать в мир многопоточности. При параллельном исполнении, нет гарантии, что порядок сохранится. Кто первый встал, того и тапки.
    Я бы вам посоветовал бить массив (или что там у вас в цикле) на 2, 3 ... N частей, строго отводя каждой части свои области (скажем, первый поток заполняет колонки 1...10, второй - 11..20 и т.д.) и запускал бы N синхронных циклов в разных потоках.
    И в принципе, чтобы понять, как работает многопоточность, я бы для начала попробовал всё сделать вручную, при помощи старого доброго System.Threading.Thread. В Tasks многое спрятано "под капот", и можно на много граблей наступить.
    Ответ написан
    5 комментариев
  • Cтоит ли учить C# по Шилдту?

    @cicatrix
    было бы большой ошибкой думать
    Учиться программировать, я считаю, надо по книге, которая впервые опубликована в 1968 году.
    Доналд Кнут "Искусство программирования"
    Вот после неё можно изучать любой язык по любой книге.
    Ответ написан
  • У меня написана игра Пятнашки но я хочю чтоб при нажатии на кнопку на фишках(кнопках) которые мы передвигаем появлися части одной картинки?

    @cicatrix
    было бы большой ошибкой думать
    Не используй кнопки. Используй image или panel. Они тоже могут работать как кнопки.
    Ответ написан
  • Как создаются большие игры на c++ или c#?

    @cicatrix
    было бы большой ошибкой думать
    Уж сколько раз твердили миру: пишутся ДВИЖКИ, а игры не пишутся сейчас, игры РИСУЮТСЯ.
    Игра почти всегда выпускается на готовом движке. Но главное сейчас - сценарий, игровая модель, 3d моделирование, анимация, текстурирование, звуковое сопровождение - т. е. процессы, вообще не связанные с программированием.
    Поверх движка есть ещё и игровая логика, так вот, она вообще обычно пишется либо на каком-нибудь самописном скриптовом языке, либо на каком-нибудь Lua.
    Чтобы сделать игру надо СЦЕНАРИСТА, руководителя, пиарщика (пиарщиков), художника (художников), моделлера (моделлеров), аниматора (аниматоров), композитора. И уж в последнюю очередь - программиста.
    Если не делать очередной говноклон известного продукта, работа начинается со сценария (даже если это тетрис), потом нужен менеджер и пиарщик, потом художники готовят концепт-арты, потом системный архитектор подбирает подходящий движок (тысячи их), либо принимается решение о написании собственного (вот тут в теории нужен программист, либо это вообще отдаётся на аутсорс), потом делается графика, оптимизируется, пишется музыка, пишется игровая логика (тут тоже теоретически нужен программист).
    Когда уже поймут люди, что для разработки игр в нынешнее время программист - далеко не главная и не решающая составляющая команды?!
    Успех проекта в огромной степени зависит от сценариста и пиарщика, потом от менеджера проекта, потом от художников, а уж потом - от программиста.
    Ответ написан
    Комментировать
  • Опыт перехода из энтерпрайза в ...?

    @cicatrix
    было бы большой ошибкой думать
    В Enterprise всё делается через ж... "на отстань" - сколько раз я это уже слышал! А вы не делайте! Попробуйте ради прикола сделать хорошо. Может быть сразу интерес к работе вернётся.
    Ну и потом, деньги - не главное... для тех, у кого они есть.
    Ответ написан
    2 комментария
  • Как увеличить размер файла в 2 раза?

    @cicatrix
    было бы большой ошибкой думать
    Если тупо увеличить файл в два раза, то так:
    class Program
        {
            static void Main(string[] args)
            {
                string filename = "C:\\1.txt";
                byte[] filebytes = File.ReadAllBytes(filename);
                using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Write, FileShare.None))
                {
                    fs.Seek(0, SeekOrigin.End);
                    fs.Write(filebytes, 0, filebytes.Length);
                } // using fs
            } // Main
        } // class Program
    Ответ написан
    Комментировать
  • Пишу таск-менеджер на ASP.NET. Как реализовать подсчёт времени выполнения задачи?

    @cicatrix
    было бы большой ошибкой думать
    Вы вообще почитайте про время жизни процесса в asp.net. Дело в том, что полагаться на исполнение каких-либо фоновых задач в приложении, которое IIS может в любой момент перезапустить, я бы не стал. Если вам необходимо серверное приложение, выполняющееся независимо от веб-морды, лучше писать его как отдельное приложение и размещать на сервере отдельной задачей.
    Ответ написан
    Комментировать
  • Как передать часть кода в метод другого класса (C#)?

    @cicatrix
    было бы большой ошибкой думать
    Кода какого? Программного?
    Судя по индексам, у вас древовидная структура данных (граф). В основном классе, необходимо считывать данные именно в него (есть, кстати, системный класс TreeNode для этого).
    Дальше можно корневой элемент дерева (или какую-то из веток) открыть в качестве свойства для изменений в другом классе.
    Ответ написан
    Комментировать
  • Как заставить стандартный браузер .NET притвориться хромом?

    @cicatrix
    было бы большой ошибкой думать
    1. Скачай Fiddler2 (это вообще must have)
    Посмотри, что отправляет Хром в качестве useragent
    2. Когда формируешь HttpWebRequest в свойство UserAgent пишешь строку хрома.
    Вот здесь есть распространённые user agent строки для него.
    Ответ написан
    Комментировать