ShowWindow SW_MINIMIZE无法恢复程序

时间:2011-03-18 15:57:40

标签: c# windows-mobile showwindow

我有一个程序,我想在后台启动,当我想稍后查看时,能够单击快捷方式链接或可执行文件并让它显示我的应用程序。我已经在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);

1 个答案:

答案 0 :(得分:1)

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

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

我不知道Imager类是否被窃听并且影响了WM尝试恢复应用程序的方式,或者它是否是我调用它的方式但是注释掉这三行代码可以解决问题所以我会查看这进一步。

不管怎样,谢谢你们!

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