2016-08-08 8 views
0

ユーザーセッションごとに1つのインスタンスしか実行できないようにするアプリケーションがあります。ユーザーがアプリケーションを再び起動するためにクリックすると、すでにフォーカスを当てています。 私はこのチュートリアルWPF Single Instance ApplicationApp.xaml.csから単一インスタンスクラスを呼び出す方法

のステップと、このチュートリアルの手順に従っている:

ステップ1:プロジェクトにファイルSingleInstance.csを追加します。

手順2:プロジェクトへの参照を追加:System.Runtime.Remoting。

手順3:アプリケーションクラスに(SingleInstance.csで定義された)ISingleInstanceAppを実装します。

このインタフェースの唯一の方法は次のとおりです。

隠すコードのコピー ブールSignalExternalCommandLineArgs(IListのargsを)アプリケーションの2番目のインスタンスを実行しようとしたときに このメソッドが呼び出されます。 argsパラメータは、2番目のインスタンスに渡されるコマンドライン引数と同じです。

手順4:単一インスタンスクラスを使用する独自のメイン関数を定義します。

アプリのクラスは今、このようになります。

隠すコードのコピー /// ステップ5:新しいメインエントリポイントを設定します。

プロジェクトプロパティ - >アプリケーションを選択し、 "スタートアップオブジェクト"を "(未設定)"ではなくAppクラス名に設定します。

手順6:デフォルトのWPFメイン機能をキャンセルします。

[アプリケーション定義]の代わりに[プロパティ]を右クリックし、[ビルドアクション]を[ページ]に設定します。

私はステップ4で固執します。私は、単一インスタンスクラスを使用する自分のMain関数をどのように定義するのか分かりません。 誰でもおかげで

+0

は([私の質問]を見てくださいhttp://stackoverflow.com/questions/38473277/wpf-single-instance-window-clickonce-pass-arguments)パラメーター部分を無視する – lokusking

答えて

0

わかりました、それはそう簡単にアプリケーションクラスであなたのApp.xaml.csファイルにこのメソッドを追加され、私を助けてください:

[STAThread]  
public static void Main(string[] args) 
{ 
    if (SingleInstance<App>.InitializeAsFirstInstance("MyApp")) 
    { 
     var app = new App(); 
     app.InitializeComponent(); 
     app.Run(); 
     // Allow single instance code to perform cleanup operations 
     SingleInstance<App>.Cleanup(); 
    } 
} 
+0

GRADAppが受け入れられず、その下に赤い線が表示される理由は何ですか? –

+0

Opps、私はそれを変更することを忘れて、投稿が更新されました。 –

+0

青色になりましたが、その下に赤い線が残っていて、「MyApp.Appのタイプをタイプパラメータとして使用できません。TApplicationは汎用タイプまたはメソッドです。Microsoft.Shell.SingleInstance MyApp.AppからMicrosoft.Shell.SingleInstanceAppへの暗黙的な参照変換なし –

-1
using System.Threading; 

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool SetForegroundWindow(IntPtr hWnd); 

/// <summary> 
/// The main entry point for the application. 
/// </summary> 
[STAThread] 
static void Main() 
{ 
    bool createdNew = true; 
    using (Mutex mutex = new Mutex(true, "MyApplicationName", out createdNew)) 
    { 
     if (createdNew) 
     { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new MainForm()); 
     } 
     else 
     { 
     Process current = Process.GetCurrentProcess(); 
     foreach (Process process in Process.GetProcessesByName(current.ProcessName)) 
     { 
      if (process.Id != current.Id) 
      { 
       SetForegroundWindow(process.MainWindowHandle); 
       break; 
      } 
     } 
     } 
    } 
} 
+0

Application.Run(new MainWindow());は自分のコードで受け入れられず、エラーは= ==> System.Windows.Forms.Application.Runに最適なオーバーロードされたメソッド(System.Windows.Forms.ApplicationContextには無効な引数が同じです) –

+0

これはWinFormsソリューションです。 – lokusking

関連する問題