PDA

View Full Version : استفاده از Webbrowser در backgroundworker



mokamel
شنبه 14 شهریور 1394, 18:26 عصر
دوستان کسی میدونه چطوری باید از Webbrowser در backgroundworker استفاده کرد ؟

abdullah20
یک شنبه 15 شهریور 1394, 01:35 صبح
چه کاری میخواید انجام بدید؟

jamal_ch
یک شنبه 15 شهریور 1394, 09:24 صبح
دوستان کسی میدونه چطوری باید از Webbrowser در backgroundworker استفاده کرد ؟
اگه راهنمایی میخواهید حتما باید یکم بیشتر توضیح بدهید

mokamel
یک شنبه 15 شهریور 1394, 10:12 صبح
سلام
ممنونم مهندس
ببین تو بک گراند ورکر می خوام هی با بروزر کار کنم . یعنی سایت های جدیدی رو توی یه لوپ بصورت مداوم نشون مشتری بدم . یجوری مینوتورینگ سایت هاش هست . و از بک گراند واسه این استافده می کنم که برنامه حالت فریز دست نده و کاربر فکر نکنه که هنگ کرده .

من تست کردم و نمیشه تو بک گراند از وب بروزر استفاده کرد . یه تست هم میتونید بکنید

ژیار رحیمی
یک شنبه 15 شهریور 1394, 13:33 عصر
من خودم یه جا لازم شد از این دو تا کنترل کنار هم استفاده کنم ولی نتیجه ایی که میخواستم حاصل نشد(چک مداوم یه سایت برای تغییرات قیمت).و روش کار رو تغییر دادم همانطور که میدانی backgroundworker هم یه نوع Thread هست .پس خودم به جای backgroundworker از یه Thread و حلقه while استفاده کردم.بعضی مواقع ممکنه با دو تا کنترل نشه اون کاری که میخوای پیاده کنی.
کد هایی که گذاشتم تست کردم مشکلی نداره


public void ReadOnlinePrices(string address)
{
if(IsHandleCreated)
Invoke((MethodInvoker)delegate
{
webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.Navigate(address);


while (!webBrowser1.IsDisposed && webBrowser1.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
});
}
void DoWork()
{
string[] add = {"http://www.google.com", "http://www.yahoo.com", "http://www.microsoft.con"};
var i = -1;
while (true)
{
i++;
if (i >add.Length-1) i = 0;
ReadOnlinePrices(add[i]);
Thread.Sleep(2000);
}
}
private void Form9_Load(object sender, EventArgs e)
{
Thread.CurrentThread.SetApartmentState(ApartmentSt ate.STA);
Task.Factory.StartNew(DoWork);
}

jamal_ch
یک شنبه 15 شهریور 1394, 14:11 عصر
سلام
ممنونم مهندس
ببین تو بک گراند ورکر می خوام هی با بروزر کار کنم . یعنی سایت های جدیدی رو توی یه لوپ بصورت مداوم نشون مشتری بدم . یجوری مینوتورینگ سایت هاش هست . و از بک گراند واسه این استافده می کنم که برنامه حالت فریز دست نده و کاربر فکر نکنه که هنگ کرده .

من تست کردم و نمیشه تو بک گراند از وب بروزر استفاده کرد . یه تست هم میتونید بکنید

سلام
برنامه رو تست کنید اگه اکی بود بگید
135025

mokamel
یک شنبه 15 شهریور 1394, 16:41 عصر
من خود کد شما رو تست کردم . و فعلن با برنامه ام هماهنگ نکردم که ببینم تو برنامم جواب می ده یا نه و اما همینجا در مورد کد شما

1- چرا هی صدای تیک تیک ( صدای کلید بر روی باتوم ) میاد ؟ کاربر دیوانه میشه که .
2- تو این حالت فقط و صرفا شما سایت رو نمایش می دین اما من بعد از نمایش می خوام سورس صفحه رو بخونم و باهاش کار دارم . اما تیکه کدی که گذاشتید برای قهمیدن لود کامل صفحه یعنی این :


while (!webBrowser1.IsDisposed && webBrowser1.ReadyState != WebBrowserReadyState.Complete)

Application.DoEvents();


وقتی هم صفحه اصلا نیومده منظورم زمانی هست که web site not found میزنه ( جالبه برا گوگل می گی اینو ولی بقیه نه ) یا هرچیز دیگه بجز صفجه اصلی این تیکه کد تشخیصش لود کامل صفحه است . که با توجه به اینکه من با سورس صفحه کار دارم . اینجا مشکل می خورم .
یعنی به نظرم باید تشخیض این باشه که ایا صفحه مورد نظر ما لود کامل شده یا نه و بعد مثلا ادامه کار

3- شما بصورت هارد کد سایت ها رو وارد کردین . من نمی خوام هارد کد باشه یعنی ورودی پارمتری تابع داشته بشه

jamal_ch
یک شنبه 15 شهریور 1394, 17:18 عصر
من خود کد شما رو تست کردم . و فعلن با برنامه ام هماهنگ نکردم که ببینم تو برنامم جواب می ده یا نه و اما همینجا در مورد کد شما

1- چرا هی صدای تیک تیک ( صدای کلید بر روی باتوم ) میاد ؟ کاربر دیوانه میشه که .
2- تو این حالت فقط و صرفا شما سایت رو نمایش می دین اما من بعد از نمایش می خوام سورس صفحه رو بخونم و باهاش کار دارم . اما تیکه کدی که گذاشتید برای قهمیدن لود کامل صفحه یعنی این :


while (!webBrowser1.IsDisposed && webBrowser1.ReadyState != WebBrowserReadyState.Complete)

Application.DoEvents();


وقتی هم صفحه اصلا نیومده منظورم زمانی هست که web site not found میزنه ( جالبه برا گوگل می گی اینو ولی بقیه نه ) یا هرچیز دیگه بجز صفجه اصلی این تیکه کد تشخیصش لود کامل صفحه است . که با توجه به اینکه من با سورس صفحه کار دارم . اینجا مشکل می خورم .
یعنی به نظرم باید تشخیض این باشه که ایا صفحه مورد نظر ما لود کامل شده یا نه و بعد مثلا ادامه کار

3- شما بصورت هارد کد سایت ها رو وارد کردین . من نمی خوام هارد کد باشه یعنی ورودی پارمتری تابع داشته بشه








صدایی من نشنیدم واقعیت تست کردم
جواب قسمت 3


private void Form1_Load(object sender, EventArgs e)
{
add [0]= "http://www.eporsesh.com";
add [1]= "http://www.yahoo.com";
add [2]="http://www.google.com" ;
add[3] = "http://stackoverflow.com";
add[4] = "http://www.barnamenevis.org/";

Thread.CurrentThread.SetApartmentState(ApartmentSt ate.STA);
Task.Factory.StartNew(DoWork);
}

public void ReadOnlinePrices(string address)
{
if (IsHandleCreated)
Invoke((MethodInvoker)delegate
{
webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.Navigate(address);


while (!webBrowser1.IsDisposed && webBrowser1.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
});
}
public static string[] add=new string[5];
void DoWork()
{

var i = -1;
while (true)
{
i++;
if (i > add.Length - 1) i = 0;
ReadOnlinePrices(add[i]);
Thread.Sleep(2000);
}
}
}

mokamel
یک شنبه 15 شهریور 1394, 19:00 عصر
واقعا صدا میاد . هی تیک تیک انگار رو باتوم کلیک کردن

قسمت دو چی مهندس ؟ پیزی به ذهنت نمیرسه ؟

ژیار رحیمی
یک شنبه 15 شهریور 1394, 19:58 عصر
دوست گرامی شما سوالی که در ابتدا پرسیدن همین بود شما نگفتین میخوای source صفحه رو هم بخونی.اون صدا هم میگی(اصلا چنین چیزی نیست و اگرم روی سیستم و برنامه شما داره ربطی به این بخش از کد که گذاشتم نداره) کدهای خودتو یه بار دیگه چک کن ببین از کجا ناشی میشه.
اما در مورد حلقه while که دو تا چک صورت میگیره که اولیش برای حالتی که webbrowser زمانی که فرم بسته شه یا به هر دلیلی Dispose شه خطا ایجاد نشه و قسمت بعدی چک کردی state یا حالت webbrowser که تا زمانی که خوندن کامل صفحه انجام نشده منتظر بماند (َApplication.DoEvent) بعد از این خط شما میتونی Source صفحه را بخونی و پردازش کنی


while (!webBrowser1.IsDisposed && webBrowser1.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
HtmlDocument doc=browser.Document;
//پردازش کدهای htmlDocument