• Как распределять потоки при асинхронном программировании?

    @cicatrix
    было бы большой ошибкой думать
    То, что вы описываете, весьма подходит под классический producer/consumer pattern (производитель/потребитель) Почему-то находится мало источников на русском языке, но англоязычных - полно.
    Есть и готовые реализации данного шаблона.

    Да, и вовсе не обязательно ограничивать количество потоков количеством ядер. Вы вполне можете использовать большее количество потоков, советую поэкспериментировать с количеством, замеряя скорости исполнения, пока не добьётесь оптимального результата.
    Ответ написан
  • Как добавить файл в БД access, а потом его достать?

    @cicatrix
    было бы большой ошибкой думать
    Считываете файл в байтовый массив, потом insert его в поле типа binary, abinary или bigbinary.
    Считываете обычным select и пишете в файл.
    Да, вам надо сохранять ещё и имя файла и его атрибуты (если это важно).

    Но вообще, если есть возможность, я бы заменил Access на любую другую RDBMS (С C# можно прекрасно обходиться SQLEXPRESS, например).
    Ответ написан
  • Как организовать информационный дисплей покупателя?

    @cicatrix
    было бы большой ошибкой думать
    По-моему, ваша задача решается простым хранителем экрана со слайд-шоу.
    Ответ написан
    1 комментарий
  • Почему поток недоступен для чтения?

    @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.
    Ответ написан
    Комментировать
  • Возможно ли создание нейронной сети на Python с 0?

    @cicatrix
    было бы большой ошибкой думать
    Если выбросить заумный термин "Нейронная сеть", и попытаться разобраться в том, что это такое с точки зрения программирования, то окажется внезапно, что это банальная система уравнений, которая решается самим алгоритмом путём перебора и сверки "ответов" с неким критерием.
    Подобное поведение можно вполне реализовать и без библиотек на любом языке.
    С другой стороны, если уж кто-то специально постарался и разработал специализированные библиоткеи для этих задач, то почему бы ими не пользоваться?
    Ответ написан
    5 комментариев
  • Как спроектировать БД с переменным количеством параметров?

    @cicatrix
    было бы большой ошибкой думать
    На одних RDBMS свет клином не сошёлся. Посмотрите в сторону nosql, мне кажется, вам это больше подойдёт.
    Ответ написан
    Комментировать
  • Как в цикле считать 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
    Ответ написан
    Комментировать
  • Перебор 0 и 1 в си?

    @cicatrix
    было бы большой ошибкой думать
    Вводим n
    Запускаем цикл i от 0 до 2n - 1
    В цикле каждое i выводим в двоичном представлении.
    Ответ написан
    Комментировать
  • Как 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. Считайте интефейс это "соглашение о сотрудничестве" между разными классами, в котором чётко определены правила взаимодействия.
    Ответ написан
  • Какие есть программы для расчета кварплаты?

    @cicatrix
    было бы большой ошибкой думать
    Знаете, по-моему, лучше Excel (Calc, или любого другого редактора электронных таблиц) в этом плане придумать сложно.
    Ответ написан
    Комментировать
  • Как сделать код 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 году.
    Доналд Кнут "Искусство программирования"
    Вот после неё можно изучать любой язык по любой книге.
    Ответ написан