Я пытаюсь запустить поток в форме для функции, которая занимает около 5 секунд, чтобы я мог заблокировать пользовательский интерфейс. У меня есть следующий код ниже, но он терпит неудачу, когда он попадает в «thread1.start». Когда я смотрю его, хотя отладчик, он просто переходит к «End Sub», и он не переходит к методу getSecurityStuff(), который я ожидаю от него. Есть идеи?Невозможно получить поток для начала в vb.net
Спасибо!
Imports System.Threading
Public Class frmAddAssets
Private theDict As Dictionary(Of String, String) = Nothing
Private Sub frmAddAssets_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Control.CheckForIllegalCrossThreadCalls = False
End Sub
Private Sub cmbTickerEntry_Leave(sender As System.Object, e As System.EventArgs) Handles cmbTickerEntry.Leave
Dim thread1 As New Thread(New ThreadStart(AddressOf getSecurityStuff))
thread1.Start()
End Sub
Public Sub getSecurityStuff()
Dim getData As New clsSecurityView(cmbTickerEntry.Text())
Try
theDict = getData.getStockData()
Catch ex As Exception
Throw
End Try
filldata()
End Sub
Private Sub filldata()
Dim list As New List(Of String)(theDict.Keys)
txtTicker.Text = cmbTickerEntry.Text.ToString()
For Each kvp As KeyValuePair(Of String, String) In theDict
Select Case True
Case kvp.Key = "Name"
txtSecurityName.Text = kvp.Value.ToString()
Case kvp.Key = "Price"
txtPrice.Text = kvp.Value.ToString()
Case kvp.Key = "Market Capitalization"
txtMarketCap.Text = kvp.Value.ToString()
Case kvp.Key = "Dividend Yield"
txtDivYield.Text = kvp.Value.ToString()
Case kvp.Key = "PE Ratio"
txtPERatio.Text = kvp.Value.ToString()
Case kvp.Key = "EPS"
txtEPS.Text = kvp.Value.ToString()
End Select
Next
End Sub
End Class
Совет: не инициализируйте ничего «ничего», это бессмысленно. – Ryan
Ваш отладчик отправляется в «End Sub», потому что это следующая строка. Поместите точку останова в начале «getSecurityStuff» для отладки нового потока. – ken
Фактически, [здесь ваш код просто вообще очищен] (http://codepad.org/z9QJjL3P). – Ryan