31-08-20, 01:47 PM
(آخر تعديل لهذه المشاركة : 31-08-20, 02:00 PM {2} بواسطة Anas Mahmoud.)
بسم الله الرحمن الرحيم
السلام عليكم اعضاء المنتدى الكريم
كان احد الاخوة قد سأل عن طريقة لجعل برنامج C# يمنع تشغيل اكثر من نسخة منه في نفس الوقت
بعد بحث وجدت الحل :
ضع هذا الكود في Program.cs قبل كل شيء في void Main :
هكذا :
ال Mutex حسب ما فهمت هو مفهوم لادارة الوصول من خلال ال Threads المختلفة للاعضاء
ما يحدث هو ان نقوم بعمل Mutex جديد باسم مميز في نقطة انطلاق البرنامج void Main قبل استدعاء نسخة من فورم البداية ،
و اذا لم تكن هذه هي النسخة الاولى من هذا ال Mutex نقوم بعمل Return من void Main
طيب الاسم المميز الذي اخترناه في هذا الكود هو MyApp ،
الان هناك مشكله : اي برنامج تقوم بعمله باستخدام هذه الطريقة ايضا ونفس الاسم MyApp سيمنع من التشغيل ايضا اذا كان البرنامج الاخر يعمل ، لذلك يجب ان تقوم باستبدال MyApp الى اسم مميز للبرنامج
طريقة جميلة لعمل ذلك هو استخدام Guid البرنامج من داخل AssemblyInfo.cs :
ثم نضعه كاسم لل Mutex :
الان برنامجي سيعمل مرة واحدة فقط في نفس الوقت
المقال التالي فيه طريقة جيدة لعرض الفورم التي تعمل الان ايضا الى الامام بدلا من اظهار رسالة خطا :
http://sanity-free.org/143/csharp_dotnet...ation.html
السلام عليكم اعضاء المنتدى الكريم
كان احد الاخوة قد سأل عن طريقة لجعل برنامج C# يمنع تشغيل اكثر من نسخة منه في نفس الوقت
بعد بحث وجدت الحل :
ضع هذا الكود في Program.cs قبل كل شيء في void Main :
كود :
var mutex = new System.Threading.Mutex(true, "MyApp", out bool createdNew);
if (!createdNew)
{
MessageBox.Show("البرنامج يعمل بالفعل");
return;
}
mutex.ReleaseMutex();
هكذا :
ال Mutex حسب ما فهمت هو مفهوم لادارة الوصول من خلال ال Threads المختلفة للاعضاء
ما يحدث هو ان نقوم بعمل Mutex جديد باسم مميز في نقطة انطلاق البرنامج void Main قبل استدعاء نسخة من فورم البداية ،
و اذا لم تكن هذه هي النسخة الاولى من هذا ال Mutex نقوم بعمل Return من void Main
طيب الاسم المميز الذي اخترناه في هذا الكود هو MyApp ،
الان هناك مشكله : اي برنامج تقوم بعمله باستخدام هذه الطريقة ايضا ونفس الاسم MyApp سيمنع من التشغيل ايضا اذا كان البرنامج الاخر يعمل ، لذلك يجب ان تقوم باستبدال MyApp الى اسم مميز للبرنامج
طريقة جميلة لعمل ذلك هو استخدام Guid البرنامج من داخل AssemblyInfo.cs :
ثم نضعه كاسم لل Mutex :
كود :
var mutex = new System.Threading.Mutex(true, "3c8be03f-a0f4-417c-a2de-b010491733cc", out bool createdNew);
if (!createdNew)
{
MessageBox.Show("البرنامج يعمل بالفعل");
return;
}
mutex.ReleaseMutex();
الان برنامجي سيعمل مرة واحدة فقط في نفس الوقت
المقال التالي فيه طريقة جيدة لعرض الفورم التي تعمل الان ايضا الى الامام بدلا من اظهار رسالة خطا :
http://sanity-free.org/143/csharp_dotnet...ation.html