PDA

View Full Version : خارج کردن برنامه از حافظه در هنگام اجراي حلقه يا پروسس



kitcat_m18
پنج شنبه 12 آبان 1390, 11:32 صبح
سلام،

يه برنامه دارم که تو يکي از فرم ها يه حلقه به اين صورته:

Private Sub Start_Serach_Click()
Dim TMP_Adress As String
Dim TMP As String

StopBrowser = False

My_List.Show
TMP_Adress = Mid(Adress, 1, Len(Adress) - 1)

For i = My_List.Az To My_List.Ta

'IF USER STOP IT
If StopBrowser = True Then
WebBrowser1.Stop
Exit For
End If

TMP = TMP_Adress + STR(i)
WebBrowser1.Navigate (TMP)

While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend

My_List.HTML = WebBrowser1.Document.Body.innerHTML
My_List.Page_Number = "Now Page:" & i

Call TestRegExp("href=(.*?)target=(.*?)</a>", "", My_List.HTML)

Next i

End Sub

تو Unload فرم Main هم از اين دستور استفاده کردم:

If Peygham(MB, "aya mayel be khoro0j mibashid?", CriticalX, BaleKhair) = "Bale" Then
Call Peygham(MB, "movafagh bashid!", InformationX, Tayid)

Dim Frm As Form

For Each Frm In Forms
Unload Frm
Next
End If

و با اين دستور حلقه رو متوقف مي کنم:


Public Sub Stop_Click()
StopBrowser = True
End Sub

وقتي که مي خوام برنامه رو از حافظه خارج کنم بعضي وقتا که حلقه هنوز متوقف نشده کد بالا فرم ها رو ميبنده اما يه بار ديگه فرم باز ميشه.

اين به خاطر خارج نشدن از حلقه بالاست.

حالا سوالم اينکه
چجوري ميشه از يک حلقه يا پروسس در حال اجرا (براي مثال Inet در هنگام دريافت اطلاعات) خارج شد و بعد برنامه رو از حافظه خارج کرد؟؟؟
مي تونم چک کنم که حلقه تموم شده يا نه اما اينکار عمل خروج رو به تعويق ميندازه.
دنبال يه راهيم که پروسس ها و حلقه هاي در حال اجرا رو Force بننده.

با تشکر :لبخندساده:

meys34
پنج شنبه 12 آبان 1390, 14:24 عصر
نظر من اینه:
برنامه درون حلقه While-wend گیر میکنه و چیزی که باعث میشه قسمت Unload_Form کار کنه دستور DoEvents هستش

یعد از اجرا شدن Unload_Form برنامه لزوما باید برگرده به خط بعد از DoEvents (ایراد هم همینجاس چون دستور Unload Frm اجرا شده و برنامه در حال بسته شدنه) پس کافیه خط بعد از DoEvents چک کنیم ببینیم Unload_Form شده یا نه

راهی که به ذهنم رسیده اینه(بسیار روش های دیگر نیز هم ...):



While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
DoEvents
If StopBrowser = True Then
WebBrowser1.Stop
Unload me
Exit For
End If
Wend