PDA

View Full Version : سوال: کد فقط یکبار اجرا بشه



titipop1
یک شنبه 07 تیر 1394, 23:03 عصر
درود دوستان
من یه خط کد دارم که میحوام فقط یکبار اجرا بشه البته توی تالار رو هم گشتم ولی چیزه خاصی دستگیرم نشد
ممنون از کمک دوستان

ehsan7007
یک شنبه 07 تیر 1394, 23:21 عصر
سلام
دوست عزیز،سوالتون خعلی گنگه!یعنی چی یکبار اجرا بشه؟؟؟؟؟مگه کدهای ی برنامه چندبار اجرا میشن؟!!
دقیق تر توضیح بدین خواهشن...

titipop1
یک شنبه 07 تیر 1394, 23:24 عصر
مهندس من تو فرم لودم یه کد دارم که میخوام از این کد یه قسمتش فقط یکبار اجرا بشه (فرم ممکنه چندین بار لود بشه)

ehsan7007
یک شنبه 07 تیر 1394, 23:28 عصر
خب ی متغیر boolتعریف کنید،حالا اون تیکه کد رو داخل یک if بزارین که اون متغییرو چک کنه،اگر true بود کد اجرا میشه،بعد کد خودتون هم
(داخل if) مقدار متغیر رو false کنید.

RmeXXXXXXXXX
یک شنبه 07 تیر 1394, 23:30 عصر
کلاس های Singleton: کلاسی هایی هستند که فقط یک نمونه از آنها در سرتاسر برنامه وجود دارد؟
آیا چنین موردی بکار شما می آید؟
راهکار دیگری هم وجود دارد که پیاده سازی ساده تری دارد. متغیرهای استاتیک مربوط به نوع هستند نه شی. همچنین میدانیم که این نوع متغیر ها یک نمونه بیشتر ندارند(از هز نوع یا کلاس فقط یکی وجود دارد ولی اشیاء بی نهایت میتوانند داشته باشند) و در تمام اشیاء قابل دسترسی هم هستند.
پس باید یک متغیر static در کلاس(فرم) مد نظر قرار بدین که اگه مثلاً false بود توی فرم لود چک بشه و کدهای لود اجرا بشن و در پایان لود اطلاعات این متغیر باید مقدار نقیض(true) بگیرد تا در دفعات بعدی مانع اجرا بشه. در حقیقت این متغیر یک پرچم خواهد بود برای اجازه اجرای دستورات:

private static bool _is_loaded= false;

private void formN_load(object sender, EventArgs e)
{
if(!_is_loaded)
{
label1.Text="";
.
.
_is_loaded= true
}
}

titipop1
یک شنبه 07 تیر 1394, 23:31 عصر
ایول مهندس چه پیشنهاد جالبی از رمیکس و احسان عزیز کمال تشکر رو دارم

titipop1
یک شنبه 07 تیر 1394, 23:51 عصر
دوستان متاسفانه هر بار که فرم لود میشه کد اجرا میشه.....!

ehsan7007
یک شنبه 07 تیر 1394, 23:57 عصر
فرمتون رو چطوری لود میکنین؟! مصلن فرم بسته میشه و دوباره بازش میکنید؟
متغیر رو سراسری تعریف کنید باید درست شه.

علیرضا.ا
دوشنبه 08 تیر 1394, 00:45 صبح
راهی که دوستان گفتن واسه رویداد دکمه جواب میده ولی واسه فرم لود نه...
هر بار که فرم بسته بشه همه ی متغیر ها حذف میشن!

راه حل کار شما:
در فرم لود چک میکنی فایلی به نام مثلا tst.txt در کنار برنامه وجود داره یا نه
اگه فایل وجود نداشت :
برنامه تا حالا اجرا نشده. پس فایل رو میسازی
اگه فایل وجود داشت:
برنامه حداقل یه بار اجرا شده.

alireza264
دوشنبه 08 تیر 1394, 00:55 صبح
سلام هر چند روش دوست گرامی RmeXXXXXXXXX کاملا درسته اما اگه کار نکرد ار یک کلاس Static استفاده کن


public static class MyClass
{
public static _is_loaded= false;
}

.
.
.
.



private void formN_load(object sender, EventArgs e)
{
if(!MyClass._is_loaded)
{
label1.Text="";
.
.
MyClass._is_loaded= true
}
}

علیرضا.ا
دوشنبه 08 تیر 1394, 01:03 صبح
سلام هر چند روش دوست گرامی RmeXXXXXXXXX کاملا درسته اما اگه کار نکرد ار یک کلاس Static استفاده کن


public static class MyClass
{
public static _is_loaded= false;
}

.
.
.
.



private void formN_load(object sender, EventArgs e)
{
if(!MyClass._is_loaded)
{
label1.Text="";
.
.
MyClass._is_loaded= true
}
}


این کدی که نوشتی همیشه اجرا میشه
چرا؟
چون فقط یک بار فرم لود اجرا میشه
از طرفی وقتی برنامه بسته بشه همه ی متغیر هایی که توی برنامه گرفتی از جمله متغیر استاتیک کلاس حذف میشن و با لود دوباره ی فرم دوباره متغیر is_loadad مقدار دهی اولیه میشه

alireza264
دوشنبه 08 تیر 1394, 01:43 صبح
سلام
خیر دوست گرامی لطفا کلاس ها و اشیا Static رو مطالعه بفرمایید

علیرضا.ا
دوشنبه 08 تیر 1394, 02:10 صبح
سلام
خیر دوست گرامی لطفا کلاس ها و اشیا Static رو مطالعه بفرمایید
متغیر با کلاس حافظه استاتیک در طول اجرای برنامه فقط یک بار مقدار میگیره.
ولی حواستون باشه درسته که کلاس حافظه استاتیکه ولی متغیره یعنی اگه برنامه بسته شد این از بین میره و با اجرای دوباره ی برنامه ادرس این متغیر دیگه ادرس قبلی نیست! یعنی مقدارش عوض میشه طبق مقدار دهی اولیه که کردین دوباره مقدار میگیره!
ولی فایل اینجوری نیست. شما صد بار هم که کامپیوتر رو ری استارت کنی هنوزم توی حافظه هست و از بین نمیره.

البته واسه کار ایشون ریجیستری هم جواب میداد ولی یذره پیچیده تر میشد ...

alireza264
دوشنبه 08 تیر 1394, 03:07 صبح
سلام دوست گرامی
خواسته titipop1 اینه : مهندس من تو فرم لودم یه کد دارم که میخوام از این کد یه قسمتش فقط یکبار اجرا بشه (فرم ممکنه چندین بار لود بشه)




اگه منظور فقط یه بار اجرا در اولین لود برنامه پس از نصب برنامه هستش حق با شماست باید درفایل نوشته بشه

علیرضا.ا
دوشنبه 08 تیر 1394, 03:14 صبح
سلام دوست گرامی
خواسته ehsan7007 اینه : مهندس من تو فرم لودم یه کد دارم که میخوام از این کد یه قسمتش فقط یکبار اجرا بشه (فرم ممکنه چندین بار لود بشه)
و اگه منظورتون اجرا فقط یک نمونه از برنامه هستش از Mutex بهتره استفاده بشه اما اگه منظور فقط یه بار اجرا در اولین لود برنامه پس از نصب برنامه هستش حق با شماست

شما یه بار تایپیک رو از اول بخون:)