Главная » 2016 » Июль » 7 » Урок №7 - Console в проекте Windows Forms
08:48
Урок №7 - Console в проекте Windows Forms
Доброго времени суток мои читатели! Сегодня мы поговорим о том, как добавить консоль параллельно с нашим проектом Windows Forms на языке C#.

Иногда появляется такая нужда, чтобы в проекте Windows Forms присутствовала консоль (к примеру для банального Debug'a), и у меня она появилась. Речь пойдет всё о том же FileSystemWatcher и консоли. В процессе написания программы на этапе сращивания с 1С я встретился с одной не маловажной проблемой, файлы, которые поступали из 1С не попадали в мою программу, у меня сразу встал вопрос в чём же дело!? После некоторых манипуляций я просто написал на C# в консольном проекте моего FileSystemWatcher и тут я понял в чем была моя ошибка. Наша 1С создает некий файл с расширением .tmp, а фильтр программы отслеживал только файлы расширения .sav, через секунду .tmp файл становился .sav файлом. Мой самый первый FileSystemWatcher в консольном режиме отслеживал изменения OnChanged с фильтром "*.sav", после того, как я установил фильтр следующего типа "*.*" я получал сообщения о событии OnChanged со следующим текстом : "Файл : neworder.tmp создан", то есть получается, что файловая система отслеживала файл .tmp, но папка не показывала мне этого файла и в конечном варианте мы видели уже файл .sav я понял, что файловая система следом за событием OnChanged она делает OnRenamed и переименовывает .tmp файл в .sav.

Далее я добавил функцию OnRenamed и она действительно регистрировала переименование файла. В тот момент, я решил, что хорошо было бы иметь консоль в моем приложении чтобы смотреть, какие события она логирует. Итак, в нашем приложении мы имеем файл с настройками в него я прописал также и консоль, чтобы её можно было отключить в случае не надобности или боевого запуска на системе.
Файл с настройками имеет следующий вид :

User's settings
Sborka Screen ver 1.0
by ZombieVDK
path folder = 
$B:\sb
sborka = true
fritur = false
Number block = 8
Debug Console status :Disabled


Что же отображается в этом файле? Всё что нужно моей программе. В нашей рознице существуют два типа продукции :
  • Сборка
  • Фритюр
За эти элементы отвечают соответствующие строчки 'sborka = true' & 'fritur = false', в данной настройке у нас программа работает только на отлов файлов с фильтром "sb*.*". Параметр 'Number block = #' отображает количество блоков заказов которые будут отображаться в программе. Параметр 'path folder = $B:\sb'дает наше программе понять, в какую папку посылать FileSystemWatcher для слежения. Следующий Параметр 'Debug Console status :Disabled' он уже отвечает за нашу консоль, в данном примере консоль отключена. Теперь рассмотрим как связать этот параметр с нашей программой.
Для того, чтобы считать параметры файла мы напишем функцию preloader, которая будет прогружать настройки, в этой статье не буду расписывать как это сделать, данный пример мы уже реализовывали в нашем
уроке №6 по FileSystemWatcher 
После того, как функция settings (которая создает наш файл с настройками) и функция preloader (которая загружает эти настройки) написаны, мы переходим к основному, написание кода для работы с консолью в Windows Forms проекте. С самого начала создаем функцию, я назвал её consondeb и прописываем вот такой код :

 

 public void consondeb()

        {

 

            if (NativeMethods.AllocConsole())

            {

IntPtr stdHandle = NativeMethods.GetStdHandle(NativeMethods.STD_OUTPUT_HANDLE);

Console.WriteLine("sbscreen.exe -- Debug Console v0.01 -- ZombieVDK");

Console.WriteLine("Debug Console будет следить за папкой в режиме Debug для отслеживание событий : \r\nOnChanged\r\nOnRenamed\r\nOnDelete\r\nAnother");

Console.WriteLine("Для деактивации консоли перейдите в настройки и произведите отключение.");

Console.WriteLine("Параметры программы : \r\nПуть = " + pathme + "\r\nСтатус Фритюра = " + fwatch +"\r\nСтатус сборки = " + watch);

            }

            else

                Console.WriteLine("Консоль Активна!");

        }

 


После того, как мы создали эту функцию, Надо ещё прописать класс NativeMethods :
 

public partial class NativeMethods
        {
            public static Int32 STD_OUTPUT_HANDLE = -11;

            [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "GetStdHandle")]
            public static extern System.IntPtr GetStdHandle(Int32 nStdHandle);

            [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "AllocConsole")]

[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]

            public static extern bool AllocConsole();
        }



На этом все, теперь в нашем проекте будет запускаться консоль параллельно с Windows Forms! Вот наш результат:

На этом наш урок закончен! До новых встреч! :)

 
Категория: Уроки по C# | Просмотров: 2894 | Добавил: bowxdlal
Всего комментариев: 0
avatar