कार्यक्रम के नीचे देखें। मैं फ़ंक्शन एबीसी के साथ एक नया थ्रेड एक्स शुरू करता हूं, फिर मैं कुछ और कार्य करता हूं। एक्स केवल उप उप के बाद क्यों शुरू होता है? नींद से पहले, इसे तुरंत शुरू नहीं करना चाहिए?मेरा धागा तुरंत क्यों शुरू नहीं हो रहा है?
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim x As New Threading.Thread(AddressOf abc)
x.SetApartmentState(Threading.ApartmentState.MTA)
x.Start()
System.Threading.Thread.Sleep(5000)
End Sub
Sub abc()
For i As Integer = 0 To 10 Step 1
Me.lblStatus.Text = "Testing DB connection (timeout in: " + i.ToString() + "s)"
'Me.StatusStrip1.Invoke(
MsgBox(i.ToString)
System.Threading.Thread.Sleep(1000)
Next
End Sub
संपादित करें:
(ए) दोनों कनेक्शन प्रयास और अलग धागे में टाइमआउट उलटी गिनती रखो:
समाधान यह है।
(बी) इस तरह यूआई अद्यतन:
If Me.InvokeRequired Then
Me.Invoke(pUpdateStatusMessage, "Successfully connected.")
Else
UpdateStatusMessage("Successfully connected.")
End If
इस के साथ
विश्व स्तर पर घोषित, इसलिए कोई तर्क गुजर आवश्यक है:
Delegate Sub t_pUpdateStatusText(ByVal strMessage As String)
Public pUpdateStatusMessage As t_pUpdateStatusText = New t_pUpdateStatusText(AddressOf UpdateStatusMessage)
Public Sub UpdateStatusMessage(ByVal strMessage As String)
Me.lblStatus.Text = strMessage
Me.StatusStrip1.Update()
End Sub
आप कैसे सत्यापित करते हैं कि विधि समाप्त होने के बाद ही धागा शुरू होता है? क्या आप लेबल देख रहे हैं, या आप ब्रेकपॉइंट आग लगने की प्रतीक्षा कर रहे हैं? –
वास्तव में, जब यह प्रदर्शित नहीं हुआ, तो मैंने ब्रेकपॉइंट सेट किया। –