wince c#プログラムは1回しか実行できません
4440 ワード
最初の方法(これを使用することをお勧めします.私はすでにテストしました)のコードは以下の通りです.
2つ目の方法:
3.
让专业组合起动一次--Mutex
using System;
using System.Collections.Generic;
using System.Windows.Forms;
//using RFIDWareHouse.View;
using System.Runtime.InteropServices;
namespace Phone
{
static class Program
{
[DllImport("coredll.Dll")]
private static extern int GetLastError();
[DllImport("coredll.Dll")]
private static extern int ReleaseMutex(IntPtr hMutex);
[DllImport("coredll.Dll")]
private static extern IntPtr CreateMutex(SECURITY_ATTRIBUTES lpMutexAttributes, bool bInitialOwner, string lpName);
private const int ERROR_ALREADY_EXISTS = 0183;
[StructLayout(LayoutKind.Sequential)]
public class SECURITY_ATTRIBUTES { public int nLength; public int lpSecurityDescriptor; public int bInheritHandle; }
/// <summary>
/// 。
/// </summary>
[MTAThread]
static void Main()
{
// Application.Run(new frMain());
IntPtr hMutex = CreateMutex(null, false, "Futureproduct");
if (GetLastError() != ERROR_ALREADY_EXISTS)
{
System.Windows.Forms.Application.Run(new frMain());
return;
}
else
{
MessageBox.Show(" .");
ReleaseMutex(hMutex);
return;
}
}
}
}
2つ目の方法:
public class Mutex
{
[DllImport("coredll.dll", EntryPoint = "CreateMutex", SetLastError = true)]
public static extern IntPtr CreateMutex(
IntPtr lpMutexAttributes,
bool InitialOwner,
string MutexName);
[DllImport("coredll.dll", EntryPoint = "ReleaseMutex", SetLastError = true)]
public static extern bool ReleaseMutex(IntPtr hMutex);
private const int ERROR_ALREADY_EXISTS = 0183;
/// <summary>
///
/// </summary>
/// <returns>
/// true: ,
/// false: ,
/// </returns>
public static bool IsExist()
{
string strAppName =
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
IntPtr hMutex = CreateMutex(IntPtr.Zero, true, strAppName);
if (hMutex == IntPtr.Zero)
throw new ApplicationException("Failure creating mutex: "
+ Marshal.GetLastWin32Error().ToString("X"));
if (Marshal.GetLastWin32Error() == ERROR_ALREADY_EXISTS)
{
ReleaseMutex(hMutex);
return true;
}
return false;
}
}
3.
让专业组合起动一次--Mutex
プログラムを開発する際に、同時に1つのインスタンスしか実行できない場合がある.
Mutexクラスは、相互分割体と呼ばれ、共有リソースへの独占アクセス権を1つのスレッドにのみ付与する同期ベースです.
2つ以上のスレッドが共有リソースに同時にアクセスする必要がある場合、システムは同期メカニズムを使用して、一度に1つのスレッドだけがリソースを使用することを確保する必要があります.
1つのスレッドが反発体を取得した場合、その反発体を取得する2番目のスレッドは、最初のスレッドが反発体を解放するまで保留されます.
アプリケーションが唯一のインスタンスであることを保証するために、Mutexクラスを次に示します.using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace
{
static class Program
{
/// <summary>
/// 。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
bool bCreate;
System.Threading.Mutex mutex = new System.Threading.Mutex(false, "SINGILE_INSTANCE_MUTEX", out bCreate);
if (bCreate)
{
Application.Run(new Form1());
}
else
{
MessageBox.Show(" ");
Application.Exit();
}
}
}
}
由来:http://www.cnblogs.com/starxp/articles/1875090.html
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace
{
static class Program
{
/// <summary>
/// 。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
bool bCreate;
System.Threading.Mutex mutex = new System.Threading.Mutex(false, "SINGILE_INSTANCE_MUTEX", out bCreate);
if (bCreate)
{
Application.Run(new Form1());
}
else
{
MessageBox.Show(" ");
Application.Exit();
}
}
}
}