یکی از چالش هایی که ممکنه در تولید یک نرم افزار بهش برخورد کنید اینه که چطور میشه یک برنامه رو فقط یک بار اجرا کرد؟ به این مفهوم که وقتی برنامه باز شد، دیگه به هیچ وجه نشه یک نمونه دیگه از برنامه رو هم در کنارش اجرا کنیم. مثل برنامه Windows Media Player که تنها یک نمونه از اون روی ویندوز قابل اجرا کردنه و تنها همون یک پروسه مسئول پخش تمامی فایلهای مالتی مدیا بر روی ویندوز شما هست.
جهت اجرای برنامه بصورت Single-Instance در دات نت میتونید از کلاس Mutex استفاده کنید:
private static bool IsAlreadyRun { get { bool mFlag; mMutex = new Mutex(true, "MUTEX_PROJECT_NAME", out mFlag); if (!mFlag) { mMutex.Close(); return true; } return false; } }
در کد بالا ابتدا یک Mutex با نام دلخواه ایجاد کردیم. در صورتی که این Mutex قبلا بر روی ویندوز موجود و در حال اجرا باشه، متغییر خروجی mFlag که بعنوان پارامتر سوم ارسال کردیم، با مقدار False پر خواهد شد و به این مفهوم هست که یک نمونه از برنامه شما هم اکنون در حال اجراست و امکان ایجاد Mutex جدید با این نام وجود نخواهد داشت. حالا شما میتونید در برنامه خودتون خصیصه ی IsAlreadyRun که در کد بالا نوشتیم رو بررسی کنید و در صورتی که مقدار برگشتی True بود، برنامه در حال اجراست و باید جلوی اجرای مجددش رو بگیرید. مثال:
[STAThread] public static void Main() { if (IsAlreadyRun) return; ... }
امیدوارم این ترفند برای شما مفید بوده باشه، سوال یا مشکلی بود کامنت بذارید حتما پاسخ میدم؛ موفق باشید!
ارسال نظر