using System; using System.Windows; using IpcUtility; namespace IpcArgsTest { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { private const string AppGuid = "{a1b2c3d4-e5f6-a1b2-c3d4-e5f6a1b2c3d4}"; private IpcManager ipcMgr; public MainWindow() { InitializeComponent(); textBox.Text = ""; } //情報表示 private void Info(string mes) { textBox.Text += mes + Environment.NewLine; } // private void Info(string[] mess) { foreach (string mes in mess) { Info(mes); } } /// <summary> /// FrameworkElement(この場合MainWindow)の初期化が完了した状態。 /// Windowに配置した要素の準備はできていない。 /// </summary> private void Window_Initialized(object sender, EventArgs e) { //IPC確立・兼・二重起動確認 ipcMgr = new IpcManager(AppGuid); ipcMgr.Connect(this, IpcCallback_ClientStarted); if (ipcMgr.IsServer) { this.Title = "サーバー"; } else { this.Title = "クライアント"; //「this.Title = "サーバー"」に対する便宜的な処理 //MainWindowは表示前にクローズするので実際に目にすることはない this.Close(); //二重起動禁止の場合はここで自身を終了させる } } /// <summary> /// FrameworkElement(この場合MainWindow)と、そこに含まれる要素の配置と描画が完了した状態。 /// </summary> private void Window_Loaded(object sender, RoutedEventArgs e) { //コマンドライン引数を利用する何らかの処理へ Info("アプリ起動時のコマンドライン引数は"); DisplayArgs(Environment.GetCommandLineArgs()); } //アプリ終了 private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { ipcMgr?.Dispose(); } //2個目の本アプリ起動により呼び出される private void IpcCallback_ClientStarted() { //コマンドライン引数を利用する何らかの処理へ Info("クライアントから送られてきたコマンドライン引数は"); var args = ipcMgr.ReceiveArgs(); DisplayArgs(args); } //コマンドライン引数を利用する何らかの処理 //・サーバー起動時とクライアント起動時の、コマンドライン引数処理の合流点。 private void DisplayArgs(string[] args) { Info(args); } } }