Я хочу скрыть окно, которое создается при вызове p.Start()
. Код, который у меня есть сейчас, работает, но моя программа зависает примерно 20-40 секунд из-за цикла while, который там находится.Скрыть окно, созданное процессом
Текущий код:
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
const int SW_HIDE = 0;
//Process p is already created and initialized
p.Start();
while(p.MainWindowHandle == IntPtr.Zero)
{
p.Refresh();
}
ShowWindow(p.MainWindowHandle, SW_HIDE);
Снятие время цикла предотвращает замерзание моей программы, но окно не скрывает то. Я сделал p.StartInfo.CreateNoWindow = true
, но это работает только для окон консоли.
Итак, мой вопрос: Как я могу скрыть окно, созданное с помощью процесса, не замерзает мою программу в течение 20 секунд
Вы пытались запустить его с помощью Task.Factory.StartNew (() => {/ * YOUR WHILE LOOP * /})? Возможно, p.Refresh вызывает большую операцию в очереди, которая заставляет вашу программу зависать на 20-40 секунд после этого из-за наполнения материала. Попробуйте Thread.sleep (100); или таймер для ожидания перед вызовом p.Refresh снова. – Measuring
Создание новой задачи и ее запуск не работает – bramhaag
Создайте processstartinfo с помощью WindowStyle = ProcessWindowStyle.Hidden, CreateNoWindow = true работал для меня в блокноте. Пробовал? – Measuring