ShowWindow SW_MINIMIZE не может восстановить программу - PullRequest
0 голосов
/ 18 марта 2011

У меня есть программа, которую я хочу запустить в фоновом режиме, и, когда я захочу ее просмотреть позже, я смогу щелкнуть по ссылке или исполняемому файлу и вызвать ее для запуска моего приложения.Я получил это, чтобы работать в эмуляторе Windows Mobile, но когда я на самом деле пробую его на устройстве, приложение сворачивается, но я не могу восстановить его, пока я не захожу во встроенную программу диспетчера задач и не нажимаю Switch To.И эмулятор, и устройство работают под управлением WM 6.1.4.Даже использование «Свернуть блок управления» («X») для интеллектуальной минимизации минимизирует приложение, но я не могу восстановить свое приложение, когда нажимаю на файл .exe.

Есть мысли?Спасибо за помощь!

РЕДАКТИРОВАТЬ: Хорошо, поэтому я, вероятно, пропустил некоторую ключевую информацию.Это многопоточная программа.Когда я не запускаю потоки и просто запускаю основной поток пользовательского интерфейса, программа просто минимизирует и восстанавливает.Как только я запускаю фоновые потоки, которые мне нужно запустить, программа свернется, но не восстановится.Нужно ли использовать для этого случая что-то отличное от SW_MINIMIZE?

Вот мой код, который минимизирует программу:

private void HideForm()
{
    if (this.InvokeRequired)
    {
        HideFormCallback del = new HideFormCallback(HideForm);
        this.Invoke(del);
    }
    else
        ShowWindow(this.Handle, SW_MINIMIZE);
}

private const int SW_MINIMIZE = 6;

[DllImport("coredll.dll")]
private static extern bool ShowWindow(IntPtr wHnd, int cmdShow);

1 Ответ

1 голос
/ 21 марта 2011

Хорошо, я нашел ответ.На самом деле это никак не связано с отдельным потоком.Кажется, что Intermec DLL, которую я использую, вызывает проблему.Устройство является сканером / портативным устройством Intermec CK3, и в моей программе я пытаюсь настроить параметры освещения тепловизора с помощью следующего кода:

Imager i = new Imager();
i.IllumLevel = 10;
i.Dispose();

Я не знаю, если класс Imager прослушивается и влияетспособ, которым WM пытается восстановить приложение, или, если это так, как я его называю, но закомментирование этих трех строк кода решает проблему, поэтому я рассмотрю этот вопрос подробнее.1006 *

РЕДАКТИРОВАТЬ: похоже, что приведенный выше код должен быть вызван в потоке пользовательского интерфейса для правильного вызова и удаления.Как только я это сделал, минимизация и восстановление работали отлично.

...