PDA

View Full Version : سوال: استفاده از نخ



hercool
سه شنبه 19 شهریور 1392, 21:17 عصر
سلام دوستان
برنامه ای که دارم می نویسم زمان زیادی میبره برای همین تصمیم گرفتم که از نخ ها استفاده کنم
البته به این منظور که هر نخ بتونه یک هسته cpu رو بکار بگیره تا اینطوری از بیشترین ظرفیت cpu بتونم استفاده کنم
حالا برنامه چکار می کنه از یه حلقه استفاده می کنه و مقادیر url داخل لیست ویو رو می خونه و ادرس رو با وببراوزر لود می کنه و بعد یکسری محاسبات روش انجام میده
حالا می خوام هر url به یک نخ فرستاده بشه و در اون نخ یک وب براوز ادرس رو لود وتوابع مخصوص رو اجرا کنه
به این شکل همزمان چند تا ادرس رو پردازش می کنم در چند وب براوزر

حالا کد اینه
{today=getnowdate();
for (int counurl = 0; counurl < listView1.Items.Count; counurl++)
{//start for count url
{ MessageBox.Show(listView1.Columns[0].ToString() + "\t" + listView1.TopItem); }

nowurl = listView1.TopItem.ToString();
MessageBox.Show(listView1.Items[0].SubItems[1].Text.ToString());
//
// tabdeil bad az alamat = va tabdil be int
int numbertarikh =Convert.ToInt32(spliteurl());
//check url valid
if (Convert.ToInt32(today) == numbertarikh) { continue; }
else
{
while (numbertarikh !=Convert.ToInt32( today))
{ //start of
webBrowser2.Navigate(listView1.Items[0].SubItems[0].Text.ToString()); while (webBrowser2.ReadyState != WebBrowserReadyState.Complete)
{

Application.DoEvents();

}
analiz(); if (state == true) { numbertarikh++; continue; }
else { splitedata(); sabtetelaat(); sabtdetail(); checkarray(); savedetaliforosh(); savedetailu(); }


numbertarikh++;
}

}


}//end of for count url
}

حالا دقیق نمی دونم چجوری از نخ ها استفاده کنم
و همچنین اینکه هر url تنها به یک نخ فرستاده بشه تا ادرسی دو بار پردازش نشه

hercool
سه شنبه 19 شهریور 1392, 21:40 عصر
از این کد برای لود کردن یک وب براوز استفاده کردم مشکلش اینه چیزی رو لود نمیکنه
public Form1()
{
InitializeComponent();
}
private void loadhtm()
{
MessageBox.Show("شروع لود ");
WebBrowser we = new WebBrowser();
WebBrowser webbrowser1 = new WebBrowser();
we.Navigate("www.google.com"); while (we.ReadyState != WebBrowserReadyState.Complete)
{
MessageBox.Show(we.DocumentText);
}

}
private void button1_Click(object sender, EventArgs e)
{
var t = new Thread(loadhtm);
t.SetApartmentState(ApartmentState.STA);
t.Start();
// MessageBox.Show(""+t.IsAlive);
// showm();
}
private void showm()
{
MessageBox.Show("it is true");
}

hercool
سه شنبه 19 شهریور 1392, 22:07 عصر
وب بروازر رو هم وقتی خودم در فرم ایجاد می کنم (از کامپوننتش استفاده می کنم )
مشکل ایجاد میشه
private void loadhtm()
{
MessageBox.Show("شروع لود ");
// WebBrowser we = new WebBrowser();
webBrowser1.Navigate("http://www.google.com"); while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
MessageBox.Show(webBrowser1.DocumentText);
}


}
private void button1_Click(object sender, EventArgs e)
{
var t = new Thread(loadhtm);
t.SetApartmentState(ApartmentState.STA);
t.Start();
// MessageBox.Show(""+t.IsAlive);
// showm();
}
private void showm(string s)
{
MessageBox.Show("it is true"+s);
}
این خطا رو میده
Error HRESULT E_FAIL has been returned from a call to a COM component.
http://msdn.microsoft.com/en-us/library/vstudio/af1y26ew%28v=vs.120%29.aspx

hercool
شنبه 23 شهریور 1392, 13:28 عصر
دوستان کسی در این رابطه نمی تونه کمکی کنه؟

csharpdoost
شنبه 23 شهریور 1392, 16:50 عصر
برای جلوگیری از کار تکراری میتونی هر آدرسی رو که میخونی از list حذف کنی یا در جای دیگه ذخیره کنی.

tooraj_azizi_1035
شنبه 23 شهریور 1392, 21:39 عصر
سلام
شما اگه میخوای محتویات یک صفحه وب رو بخونی می تونی از متد DownloadStringAsync شیء WebClient استفاده کنی.