PDA

View Full Version : مشکل نخها با وب بروزر



Omid.R.A.Candy
شنبه 30 شهریور 1392, 00:40 صبح
سلام

من تو قسمتی از کدهام از یک نخ برای لود کردن صفحه بروزر استفاده می کنم و می خوام تا لود شدن کامل صفحه نخ منتظر لود شدن بمونه.کد زیر رو نوشتم ولی نمی دونم چرا ارور میده:

و همچنین نمی خوام از رویداد وب کامپلیت استفاده کنم.


Dim Thread2 As System.Threading.Thread

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Thread2 = New System.Threading.Thread(AddressOf Ros)
Thread2.Start()
End Sub


Private Sub Ros()
For Number_of_page = 1 To 10
'---------------------------------------
WebBrowser1.ScriptErrorsSuppressed = True
WebBrowser1.Navigate("http://barnamenevis.org/forumdisplay.php?20-VB.NET/page" & Number_of_page & "&order=desc")
'---------------------------------------
While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
End While
'---------------------------------------
MsgBox("Page loaded!")
'---------------------------------------
Next Number_of_page


خوب همون طور که مشاهده می کنید مسج باکس بدون لود شدن صفحه به نمایش در می آد! در حالی که می با یست بعد از لود شدن کامل نشون داده بشه.

در ضمن خطایی که میگره به این قسمت شامل میشه:

'---------------------------------------
While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
End While
'---------------------------------------

به نظر تون من چکار کنم؟

Omid.R.A.Candy
شنبه 30 شهریور 1392, 17:45 عصر
دوستان که در زمینه نخها متخصصن نظری ندارن؟

Omid.R.A.Candy
یک شنبه 31 شهریور 1392, 07:16 صبح
نمی دونم هر وقت سوالی می پرسم چرا کسی جواب نمی ده!!!

دو حالت داره:
1-یا سوالم خیلی سخته.
2-یا سوالم خیلی آسونه .

در هر دو حالت هیشکی جواب سوالمو بلد نیست تا بگه.جالبه!!!

محسن شامحمدی
یک شنبه 31 شهریور 1392, 23:55 عصر
ببین امید جان وقتی شما یک کامپوننت رو می زارید روی فرم،به برنامه اعلام می کنی که این شی رو توی ترد اصلی(Main Thread) بسازش
حالا این کامپوننت هم که می خواد بار بشه و خیلی ستگینه خب تمام فشارش رو می ندازه روی ترد اصلی دیگه..و از طرفی نمی شه شی ای رو توی یک ترد بسازی بعد بیاریش تو یک ترد دیگه نمایش بدیش
سه تا راه به ذهنم می رسه
1- اگر هدفت نمایش دادن اطلاعات صفحه وب نیست،و می خوای با کد Html صفحه کار کنی می تونی از کلاس های httpwebrequest , httpclient و اینطوور کلاس ها استفاده کنی
2- شی وب براوزر رو تووی ترد خودت بساز،صفحه موردنظر رو توووش لوود کن..هر کاری با متدهاش و پراپرتی هاش داری می توونی انجام بدی ..همه و همه توی ترد.و به کاربر نشوون ندی(بخاطر همون قضیه بالا)
3-اگر شی web browser می تونه متن html رو دستی بهش بدی نمایش بده(من نمی دونم می تونه یا نه)، می تونی توی یک ترد کد html صفحه رو دانلود کنی و درآخر که کد دانلود شد روی webbrowser روی فرم نشون بدیش

موفق باشی دوست من

Omid.R.A.Candy
دوشنبه 01 مهر 1392, 22:55 عصر
ببین امید جان وقتی شما یک کامپوننت رو می زارید روی فرم،به برنامه اعلام می کنی که این شی رو توی ترد اصلی(Main Thread) بسازش
حالا این کامپوننت هم که می خواد بار بشه و خیلی ستگینه خب تمام فشارش رو می ندازه روی ترد اصلی دیگه..و از طرفی نمی شه شی ای رو توی یک ترد بسازی بعد بیاریش تو یک ترد دیگه نمایش بدیش
سه تا راه به ذهنم می رسه
1- اگر هدفت نمایش دادن اطلاعات صفحه وب نیست،و می خوای با کد Html صفحه کار کنی می تونی از کلاس های httpwebrequest , httpclient و اینطوور کلاس ها استفاده کنی
2- شی وب براوزر رو تووی ترد خودت بساز،صفحه موردنظر رو توووش لوود کن..هر کاری با متدهاش و پراپرتی هاش داری می توونی انجام بدی ..همه و همه توی ترد.و به کاربر نشوون ندی(بخاطر همون قضیه بالا)
3-اگر شی web browser می تونه متن html رو دستی بهش بدی نمایش بده(من نمی دونم می تونه یا نه)، می تونی توی یک ترد کد html صفحه رو دانلود کنی و درآخر که کد دانلود شد روی webbrowser روی فرم نشون بدیش

موفق باشی دوست من

جناب آقای شامحمدی حضور دوباره حضرتعالی باعث قوت قلب بروبچه های این سایته، لطفا در صورت امکان نگذارید این حضورتون کم رنگ بشه.با تشکر


ولی در مورد سوالم یه اطلاعات تکمیلی خدمتتون عرض کنم تا شما من رو راهنمایی کنید:

هدف من این نیست که بیام یه صفحه رو تو وب بروزر برا کاربر نمایش بدم بلکه فقط می خوام از یک سری اطلاعات صفحه استفاده کنم. و البته خودتون بهتر می دونید تا یک صفحه کامل لود نشه نمیشه از اطلاعاتش استفاده کرد.حالا چرا می خوام این کارو با ترد بکنم چون بدون ترد برنامم کند و هنگ می شه ولی در عین حال کارشو به خوبی انجام میده.

و شما واقعا واردید بله من صرف کار کردن با ترد ها متوجه شده بودم که ترد منتظر دانلود صفحه میشه! ولی منتظر لود شدن یا به عبارتی نوگیت شدن نمیشه!!! فقط من می خوام تو چرخهی ترد ، ترد منتظر لود شدن پیج بمونه.این هم که فرمودین دانلود کنم و دوباره نویگید کنم فکر جالبی به نظر می آد و می تونه یه راه حل باشه.ولی می دونم که خودتون هم از این راه حل خوشتون نمی آد چون یه جور مسکنه!:چشمک: درد اصلی یا سوال اصلی سر جاشه!!!

یه نمونه برنامه هم نوشتم تا بهتر منظورم رو متوجه بشین.

111116

محسن شامحمدی
سه شنبه 02 مهر 1392, 09:32 صبح
جناب آقای شامحمدی حضور دوباره حضرتعالی باعث قوت قلب بروبچه های این سایته، لطفا در صورت امکان نگذارید این حضورتون کم رنگ بشه.با تشکر
شما لطف دارید.من که کسی نیستم..اساتید من هنوز در این سایت دارن فعالیت می کنن


هدف من این نیست که بیام یه صفحه رو تو وب بروزر برا کاربر نمایش بدم بلکه فقط می خوام از یک سری اطلاعات صفحه استفاده کنم.

2- شی وب براوزر رو تووی ترد خودت بساز،صفحه موردنظر رو توووش لوود کن..هر کاری با متدهاش و پراپرتی هاش داری می توونی انجام بدی ..همه و همه توی ترد
دقت نمی کنی آ.:)
به هر حال یک نمونه نوشتم امیدوارم به دردت بخوره

Omid.R.A.Candy
سه شنبه 02 مهر 1392, 10:32 صبح
شما لطف دارید.من که کسی نیستم..اساتید من هنوز در این سایت دارن فعالیت می کنن



دقت نمی کنی آ.:)
به هر حال یک نمونه نوشتم امیدوارم به دردت بخوره



دستتون درد نکنه کف کردم.مرسی.

دوستانی که این تاپیک رو دنبال می کنند یا دنبال خواهند کرد همین قدر بگم که من این سوال رو تو کدپروجکت مطرح کردم ولی هیشکی هیچی بارش نبود!ولی آقای شامحمدی تو زمینه ی ترد دکترا دارن واقعا دستتون درد نکنه.


می خواستم بدونم این قطعه کد یعنی چی؟ اگه توضیح بدین درکش می کنم بجای اینکه صرفا کپیش کنم:



Thread1.SetApartmentState(Threading.ApartmentState .STA)



استاد من یه چیزی به نظرم امده البته باید قبل تر از اینها می گفتم ولی الان می گم:

بهتر نبود ما بجای رفع ایراد به کد Application.DoEvents() می امدم مشکل رو با کدهای همچون Thread1.Suspend() یا Thread1.Abort() سرهم می آوردیم؟ چون در قطعه کد Application.DoEvents کل برنامه به خواب میره ، منظورم اینه که تحت شعاع قرار میگره ( حتی تو نمونه خودتون هم توجه کرده باشین وقتی داره کد Application.DoEvents رو اجراه می کنه بفهمی نفهمی سیستم هنگ می کنه!