0

1 つのフォームで単純な Windows アプリを作成しました。その目的は、1 つのインスタンスでのみ実行することです。私はミューテックス アプローチを使用し、2 番目のインスタンスが実行を試みたときにメッセージをスローしました。ここで、このメッセージ ボックスを変更し、2 番目のインスタンスを起動しようとするときに最初のインスタンスのみを一番上に表示したいと考えています。私のコードは現在:

namespace WindowsFormsApplication2
{
    static class Program
    {

        [STAThread]                
        static void Main()
        {


            bool mutexCreated = false;
            System.Threading.Mutex mutex = new System.Threading.Mutex(true,@"Local\WindowsFormsApplication2.WindowsFormsApplication2.exe", out mutexCreated);

           if(!mutexCreated )  
           {
               if( MessageBox.Show("The application is already running.Hit the OK to exit",             "",MessageBoxButtons.OK, MessageBoxIcon.Information ) != DialogResult.Cancel )
               {
                  mutex.Close(); 
                  return;
               }
           }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
4

2 に答える 2

2

.NET は、これに対して既に非常に優れたサポートを提供しており、単一インスタンス アプリの両方をサポートし、最初のアプリに別のインスタンスが開始されたことを知らせます。自分でスピンするよりも、これを強く支持してください。WindowsFormsApplicationBase クラスを使用して、Program.cs ファイルを次のように変更します。

using System;
using System.Windows.Forms;
using Microsoft.VisualBasic.ApplicationServices;    // Add reference to Microsoft.VisualBasic

namespace WindowsFormsApplication1 {
    class Program : WindowsFormsApplicationBase {
        public Program() {
            this.EnableVisualStyles = true;
            this.IsSingleInstance = true;
            this.MainForm = new Form1();
        }
        protected override void OnStartupNextInstance(StartupNextInstanceEventArgs e) {
            e.BringToForeground = true;
        }
        [STAThread]
        public static void Main(string[] args) {
            new Program().Run(args);
        }
    }
}

OnStartupNextInstance() メソッドによって、メイン ウィンドウが最前面に戻されることに注意してください。その e.CommandLine プロパティを使用して、2 番目のインスタンスからメイン インスタンスに渡されるコマンド ライン引数を取得することもできます。ファイルの関連付けを使用する場合に役立つ傾向があります。

于 2013-01-14T20:42:26.530 に答える
0

これは、私が見つけることができるのと同じことを行う投稿の最新バージョンです。基本的に、他のプロセス情報を取得して、それを前面に出します。

http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/42b3db75-e61e-4f59-bf2b-c96a40cfb4e4

于 2013-01-14T19:14:28.830 に答える