PDA

View Full Version : صدا كردن تابع, از سري گيري تابع قبل



jigily
پنج شنبه 19 خرداد 1390, 21:36 عصر
من يك تابع رو با كليك بر روي دكمه با thread استارت مي كنم توي يك حلقه for .بعد وسط برنامه ميخوام برم به يك تابع ديگه و اطلاعاتم ذخيره كنم برگردم ادامه برنامه بايد از چه بخش هايي توي thread استفاده كنم.چون وقتي قبل تابع وقفه بدم بعد resum بدم باز اون تابع را اجرا ميكنه نميدونم بايد چكار كنم...:گریه::ناراحت:

Padrone
جمعه 20 خرداد 1390, 13:23 عصر
میتونی از دستورات break-continue استفاده کنی

jigily
جمعه 20 خرداد 1390, 15:21 عصر
میتونی از دستورات break-continue استفاده کنی

ميشه بيشتر توضيح بديد.

saman6384
جمعه 20 خرداد 1390, 17:19 عصر
for(int i = 0; i < 10; i++){
if(i == 0) break;
DoSomeThingWith(i);
}

اینجوری هیچ وقت تابع dosonething اجرا نمیشه


for(int i = 0; i < 10; i++){
if(i == 0) continue;
DoSomeThingWith(i);
}

اینجوری وقتی تابع dosomething اجرا میشه که i =0 نباشه! ینی برای 1 تا 9 اجرا میشه!

jigily
جمعه 20 خرداد 1390, 18:06 عصر
for(int i = 0; i < 10; i++){
if(i == 0) break;
DoSomeThingWith(i);
}

اینجوری هیچ وقت تابع dosonething اجرا نمیشه


for(int i = 0; i < 10; i++){
if(i == 0) continue;
DoSomeThingWith(i);
}

اینجوری وقتی تابع dosomething اجرا میشه که i =0 نباشه! ینی برای 1 تا 9 اجرا میشه!
يعني الان من break بزارم بعدش تابعي كه ميخوام صدا بزنم .. خب بعدش continue را كجا بزارم؟توي همين تابعي كه تازه صدا زدم يا توي تابع قبلي بعد تابعي كه صدا زدم؟؟

saman6384
جمعه 20 خرداد 1390, 20:08 عصر
من با break و continue نگفتم که مشکلتون حل میشه!

فقط کارشونو توضیح دادم :چشمک:

من با این روش بلدم:لبخندساده:

jigily
جمعه 20 خرداد 1390, 22:59 عصر
من با break و continue نگفتم که مشکلتون حل میشه!

فقط کارشونو توضیح دادم :چشمک:

من با این روش بلدم:لبخندساده:
منم همون كارش ميگم ديگه من قبل تابعي كه ميخوام صدا بزنم break بزنم بعدش چجوري بايد بگم بعد از اجراي اين تابع برگرد به تابع قبل و اون از ادامه اين تابع كه صدا زدم اجرا كن؟ اين continue جاش كجاست؟
يعني من وقتي تابع اولم با ترد اجرا كردم بعد اون تابعي كه ميخوام صدا كنم بعد اون t.suspend() بزنم بعد توي اون تابعي كه صد ا زدم بعد از اتمام كارش t.resume() كنم برميگرده به اين suspend() اما بايد قبل صدا زدن تابع برنامم متوقف كنم و دوباره اجرا كنم نميشه اون زودتر اجرا بشه آخه...

saman6384
جمعه 20 خرداد 1390, 23:37 عصر
خوب عزیز این رفتن شما به تابع دوم!
ربطی به مقدار شمارنده حلقتون داره؟

jigily
شنبه 21 خرداد 1390, 10:12 صبح
خوب عزیز این رفتن شما به تابع دوم!
ربطی به مقدار شمارنده حلقتون داره؟

اره ... يك كاري توي حلقه انجام ميده بعد بايد بره توي تابع ديگه اي اطلاعات را در ديتابيس ذخير كنه برگرده باز ادامه كار انجام بده:لبخند:

saman6384
شنبه 21 خرداد 1390, 10:26 صبح
خوب با دستور If بفرستش هر جا که می خوای!!

مثلا اگه
i % 500 == 0

تابع دومی صدا بشه! ( هر 500 تا که میشمره تابع دومی صدا میشه)

فک نکنم break بدردت بخوره! چون کلا از حلقه میندازتت بیرون!

continue هم میگه دستورایی که زیرش هستن رو بی خیال بشه ! که اینم به نظرم به کارت نیاد! ( میشه ازش استفاده کرد! اما همون کار if که گفتم رو میکنه!)

jigily
یک شنبه 22 خرداد 1390, 10:41 صبح
خوب با دستور If بفرستش هر جا که می خوای!!

مثلا اگه
i % 500 == 0

تابع دومی صدا بشه! ( هر 500 تا که میشمره تابع دومی صدا میشه)

فک نکنم break بدردت بخوره! چون کلا از حلقه میندازتت بیرون!

continue هم میگه دستورایی که زیرش هستن رو بی خیال بشه ! که اینم به نظرم به کارت نیاد! ( میشه ازش استفاده کرد! اما همون کار if که گفتم رو میکنه!)

ايني كه ميگي فايده نداره...
چون من ميخوام هر بار كه به حلقه اضافه ميشه يعني قبل اضافه شدن برم توي تابع save و برگردم :گریه:

saman6384
یک شنبه 22 خرداد 1390, 11:44 صبح
خوب تو حالت معمولی وقتی صداش بزنی میره توشو بر میگرده دیگه!!
غیره اینه مگه؟

منظورت اینه ؟

public static void Main ()
{
int x = 0;
do
{
Console.WriteLine(x);
x++;
} while (x < 5);
}

jigily
یک شنبه 22 خرداد 1390, 12:08 عصر
خوب تو حالت معمولی وقتی صداش بزنی میره توشو بر میگرده دیگه!!
غیره اینه مگه؟

منظورت اینه ؟

public static void Main ()
{
int x = 0;
do
{
Console.WriteLine(x);
x++;
} while (x < 5);
}
ببين اينه

button1_click()
{
for(inti=0;i>j;)
{
//do jobs
if(كار انجام شد)
}
save()
i++;
}
}
public Save()
}
ذخيره در ديتابيس
{


خب حالا وقتي save را صدا ميكنه برميگرده به خط i++ خودبخود؟؟

saman6384
یک شنبه 22 خرداد 1390, 12:39 عصر
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(counter));
t.Start();
}
private void ShowInTextbox(int i)
{
string str = i.ToString();
textBox1.Invoke((MethodInvoker)delegate{textBox1.T ext = str;});
}
private void counter()
{
int i = 0;
do
{
ShowInTextbox(i);
i++;
} while (i < 1000000);
}

jigily
یک شنبه 22 خرداد 1390, 13:55 عصر
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(counter));
t.Start();
}
private void ShowInTextbox(int i)
{
string str = i.ToString();
textBox1.Invoke((MethodInvoker)delegate{textBox1.T ext = str;});
}
private void counter()
{
int i = 0;
do
{
ShowInTextbox(i);
i++;
} while (i < 1000000);
}

invoke كه گذاشتي حتما بايد باشه؟

saman6384
یک شنبه 22 خرداد 1390, 14:14 عصر
اگه از یه ترد بخوای با اجزای یه ترد دیگه کار کنی آره!

اینو واسه اینکه ببینی میره تو یه تابع دیگه هو بر میگرده گذاشتم! تو جای اون ShowInTextbox هر چی دوس داری بزار

jigily
یک شنبه 22 خرداد 1390, 22:23 عصر
مشكلم حل شد دوست عزيز..
واقعا ازت ممنونم..
يا علي