2011-09-19 20 views
2

私は、コンパクトなフレームワーク3.5を実行しているハンドヘルドデバイス上の複数のインスタンスの問題を止める多くの方法を試してきました。.NET Compact Frameworkで複数インスタンスを完全に防止することは可能ですか?

現在、私は "Mutex"を作成して解決策を得て、同じプロセスが実行されているかどうかを確認します。プログラム開始時に最初に実行される "Program.cs"にこの文を入れます。

しかし、私はそれが実行中に "プログラムアイコン"を無効にする必要があるという要求をユーザーから受けているため、問題が発生しないと思います。

私は、たぶん短期間に何度もプログラムを「開く」可能性があると理解しています。だから、もしまだ "開く"ことができれば。つまり、プログラム自体が初期化され、最終的には失敗することになります。それは絶対に複数のインスタンスを防ぐことは可能ですか?またはWindows CE上のレジストリを編集するようなプログラミングをしていない別の方法がありますか?ここで


私のソースコードは次のとおりです。

bool firstInstance; 
NamedMutex mutex = new NamedMutex(false, "MyApp.exe", out firstInstance); 

if (!firstInstance) 
{ 
    //DialogResult dialogResult = MessageBox.Show("Process is already running..."); 
    Application.Exit(); 
} 

NamedMutexがOpenNetCFからクラスです。

答えて

5

コードはほぼ正常です。行方不明のものは、アプリケーション出口を削除し、現在実行中のインスタンスを上に持ってくるのに必要なコードをそこに入れることです。私はこれを過去に行ったので、アイコンを無効にしたり隠したりする必要はありません。単に実行中のインスタンスを検出してフォアグラウンドにするだけです。

編集:

ここにいくつかのコードスニペット:

[DllImport("coredll.dll")] 
private static extern IntPtr FindWindow(IntPtr className, string windowName); 

[DllImport("coredll.dll")] 
internal static extern int SetForegroundWindow(IntPtr hWnd); 

[DllImport("coredll.dll")] 
private static extern bool SetWindowPos(IntPtr hwnd, int hwnd2, int x,int y, int cx, int cy, int uFlags); 

if (IsInstanceRunning()) 
{ 
    IntPtr h = FindWindow(IntPtr.Zero, "Form1"); 
    SetForegroundWindow(h); 
    SetWindowPos(h, 0, 0, 0, Screen.PrimaryScreen.Bounds.Width,Screen.PrimaryScreen.Bounds.Height, 0x0040); 

    return; 
} 

は...(コメントを含む)

http://www.nesser.org/blog/archives/56の詳細は以下のリンクをご確認ください

What is the best way to make a single instance application in Compact Framework?

+0

T今、あなたが私に言ったように、実行中のインスタンスを上に持ってくるコードを探しています。しかし、私はいくつかの質問があります。ユーザーがプログラムを開くためにクリックしたため、 "Application.Exit()"が必要になると思います。つまり、新しいインスタンスが作成されたということです。したがって、メモリを節約するためには、それ自身を終了する必要があります。これは正しいですか ? –

+0

上記の私の小切手をチェックすると、返品があります。 Application.Runを呼び出さない限り、リターンまたはApplication.Exitでどのように動作するかをテストできます。別のインスタンスが既に実行されていることが検出された場合は、新しいインスタンスを終了します。 –

+0

Davide、Thx aあなたのためにたくさん助けてください。あなたのコードから見たように。フォアグラウンドに設定するウィンドウを特定する必要がありますか? –

関連する問題