PDA

View Full Version : سوال: Background Worker و حلقه



areeef
یک شنبه 13 دی 1394, 14:15 عصر
سلام دوستان یک تکه کد من به صورت زیر است :

private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
this.Invoke(new MethodInvoker(delegate()
{

foreach (string usr in listBox2.Items)
{

string[] ls = usr.Split(':');
string post_login = "vb_login_username=" + ls[0] + "&vb_login_password=" + ls[1] + "&do=login&s=&cb_cookieuser_navbar=1";
setti.login("http://www.webhostingtalk.ir/login.php?do=login", post_login);

//Status
richTextBox1.Text = setti.login_header;
label2.Text = setti.login_status;

backgroundWorker1_msg.RunWorkerAsync();
}
}));
}

یک حلقه هست که داخلش یک تابع از کلاس باز میشه (یک webrequest فرستاده میشه). مشکل اینه که برای این حلقه برای جواب webquest صبر نمیکنه و حلقه میره جلو برای خودش و باعث میشه UI هم هنگ کنه میخواستم ببینم اساتید راه حلی داره ؟

از visual studio 2010 هم استفاده میکنم، منابع خارجی میخوندم مثل اینکه از 2013 به بعد await اومده که 2010 نداره و این مشکل صبر کردن برای جواب حل شده، اگر میشه اینم توضیح بدید. ممنون/

cmsdqq2
یک شنبه 13 دی 1394, 22:06 عصر
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)

رو به

private async void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)

تغییر بدین و اینکه در زمان درخواست، قبل از اون await رو قرار بدین

policweb
دوشنبه 14 دی 1394, 00:11 صبح
دوست عزیز میشه تابع خط پایین رو نشون بدید
setti.login("http://www.webhostingtalk.ir/login.php?do=login", post_login);

backgroundWorker1_msg.RunWorkerAsync();
و اینکه توضیح بدید این خط چیکار می کنه؟

areeef
دوشنبه 14 دی 1394, 02:28 صبح
سلام مشکلم حل شد داخل backgroundworker به خاطر اینکه textbox باید مقدار میدادم باید توکن ایجاد میکردم این باعث میشد به کل برنامه هنگ و بریزه بهم.

مقدار دهی های textbox و .. رو گذاشتم با background_progressChanged کامل درست شد.