Показаны сообщения с ярлыком Си. Показать все сообщения
Показаны сообщения с ярлыком Си. Показать все сообщения

пятница, 18 декабря 2015 г.

Watchdog timer

На одном обслуживаемом объекте промышленный компьютер выполняющий важные круглосуточные задачи по непонятным причинам периодически повисает стабильно раз в неделю. Длительное исследование проблемы результатов не дало, и сложилось стойкое убеждение что причина - дефект одного из компонентов материнской платы, т.е. чисто железная проблема. Было предложено задействовать встроенный в мать watchdog таймер, реализованный на чипе winbond w83627 представляющий Super I/O контроллер. Но одно дело выдвинуть идею, другое - ее воплотить. Этим и займемся...

среда, 3 сентября 2014 г.

InputBox в C#

C# предлагает разработчику удобный класс MessageBox в пространстве имён System.Windows.Forms. Однако ориентирован он исключительно на диалоговые окна вывода различного рода сообщений. Диалоговых окон ввода данных (InputBox) не предусмотрено. Странная асимметрия. А ведь получать данные от пользователя приходится почти в каждом проекте! Конечно, можно создать собственный класс диалогового окна и реализовать весь необходимый функционал. Но гораздо быстрее и проще в условиях ограниченности времени использовать InputBox из сборки Microsoft.VisualBasic.dll. Подключив сборку к проекту, можно написать в тексте программы
var s = Interaction.InputBox("Text", "Caption", "Value", posX, posY);
Первые три параметра имеют формат строки. Последние два в формате целого числа управляют расположением окошка на экране монитора. Это очень важные параметры, так как InputBox не предлагает никаких средств для привязки его к родительскому окну. Поэтому, чтобы окошко не появлялось на экране где попало используется его позиционирование. Значение введённое пользователем возвращается функцией InputBox в виде строки.

пятница, 27 июня 2014 г.

Работа с zip в C#

Работая в рамках NET Framework 3.5 не нашел понятных и простых в использовании встроенных средств для создания zip архивов. В версии 4.5 такой проблемы нет. Сборка System.IO.Compression содержит класс ZipFile удовлетворяющий меня вполне. Однако в низших версиях указанная сборка содержит только два класса GZipStream и DeflateStream. Есть конечно еще и сборка System.IO.Packaging, но формат генерируемого ею файла zip несколько отличается от стандартного и заточен скорее под XML. Таким образом, встроенных средств работы со стандартными zip файлами в dotNET 3.5 попросту нет. Осознав этот печальный факт я скрипя сердце стал искать сторонние средства. Таких нашлось немало, но я упомяну лишь два из них.

пятница, 16 мая 2014 г.

Вызов внешней программы из приложения C#

В практике программирования бывает возникает необходимость вызова из приложения некоторой внешней программы возможно с передачей ей списка аргументов. В C# эта задача решается средствами System.Diagnostics.Process. Приведу небольшой пример, показывающий имеющиеся в распоряжении программиста возможности.

среда, 1 августа 2012 г.

Случайные числа в VC++

Часто в задачах определенного типа требуется строить последовательности чисел лежащие в заданных границах и удовлетворяющие условиям равномерного распределения. Перед практической частью изложения материала неплохо бы освежить в памяти теоретические аспекты случайных чисел. Для этого вполне достаточным на мой взгляд будет переход по ссылке Генераторы случайных чисел...

Запуск проводника в VC#

Чтобы запустить из программы на C# проводник Windows нам понадобиться пространство имен System.Diagnostics и класс Process. Данный класс предлагает метод Start() который и организует вызов внешней программы. Для этого разместим на форме проекта C# WinForms объект Button, определим его имя как btnExplorer и зададим содержание функции Click() обрабатывающей нажатие кнопки:
using System.Diagnostics;

private void btnExplorer_Click(object sender, EventArgs e)
{
     Process.Start("explorer");
}

В результате, после клика на кнопке экран монитора отобразит проводник Windows в заданном по умолчанию виде, соответствующем запуску проводника через кнопку Пуск->Выполнить. Но не всегда этот вид удовлетворителен. Усложним задачу, требуя, чтобы проводник отображал не папку "Мои документы", а некоторую наперед заданную...