0

我有一个想在后台启动的程序,当我想稍后查看它时,可以单击快捷链接或可执行文件并让它调出我的应用程序。我已经让它在 Windows Mobile 模拟器中工作,但是当我在设备上实际尝试它时,应用程序最小化但我无法将其恢复,除非我转到内置任务管理器程序并单击切换到。模拟器和设备都运行 WM 6.1.4。即使使用最小化控制框(“X”)进行智能最小化也会最小化应用程序,但是当我单击 .exe 文件时,我无法恢复我的应用程序。

有什么想法吗?感谢帮助!

编辑:好的,所以我可能遗漏了一些关键信息。这是一个多线程程序。当我不启动线程而只是让主 UI 线程运行时,程序最小化并恢复得很好。一旦我启动需要运行的后台线程,程序就会最小化,但不会恢复。在这种情况下,我是否需要使用 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);
4

1 回答 1

1

好的,我找到了答案。它实际上与单独的线程完全无关。我正在使用的 Intermec DLL 似乎导致了这个问题。该设备是 Intermec CK3 扫描仪/手持设备,在我的程序中,我尝试使用以下代码设置成像仪照明设置:

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

我不知道 Imager 类是否存在错误并影响 WM 尝试恢复应用程序的方式,或者是否是我调用它的方式,但注释掉这三行代码可以解决问题,因此我将进一步研究。

无论如何,谢谢,伙计们!

编辑:看起来上面的代码需要在 UI 线程上调用才能正确调用和处理。一旦我这样做了,最小化和恢复工作就完美了。

于 2011-03-21T15:53:29.967 回答