0

バックグラウンドで起動したいプログラムがあり、後で表示したいときに、ショートカットリンクまたは実行可能ファイルをクリックして、アプリケーションを起動させることができます。これはWindowsMo​​bileエミュレーターで機能するようになりましたが、実際にデバイスで試してみると、アプリは最小化されますが、組み込みのタスクマネージャープログラムに移動して[切り替え]をクリックしない限り、元に戻すことはできません。エミュレーターとデバイスの両方がWM6.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 がアプリを復元しようとする方法に影響を与えているのか、それとも私が呼び出している方法なのかはわかりませんが、これらの 3 行のコードをコメントアウトすると問題が解決するので、さらに調査します。

とにかくありがとう、みんな!

編集: UI スレッドで上記のコードを呼び出して正しく処理する必要があるようです。この最小化と復元を行うと、完全に機能しました。

于 2011-03-21T15:53:29.967 に答える