我使用SQLite数据库中的查询作为ComboBox的AutocompleteCustomSource。另外,我想在单独的线程中加载数据。我的LoadData方法在直接调用时工作正常,但在从BackgroundWorker线程调用时失败。从后台线程调用它时,会在Specified cast is not valid
行上抛出 csearch.AutoCompleteCustomSource.Add(hh("Taj"))
异常。以下是我的代码:
Sub LoadData()
Dim connetionString As String
Dim cnn As SQLiteConnection
connetionString = "Data Source=" + Application.StartupPath + "\Mydatabase.db;"
cnn = New SQLiteConnection(connetionString)
cnn.Open()
Dim sqlComm88 As New SQLiteCommand("SELECT Taj FROM Taj_deu ", cnn)
Dim hh As SQLiteDataReader = sqlComm88.ExecuteReader()
While hh.Read()
csearch.AutoCompleteCustomSource.Add(hh("Taj"))
End While
End Sub
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Call loaddata()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
BackgroundWorker1.RunWorkerAsync()
End Sub
答案 0 :(得分:0)
我们需要知道它失败了哪一行,但是乍看之下,尝试使用&符号代替加号来连接VB中的字符串。
connetionString = "Data Source=" & Application.StartupPath & "\Mydatabase.db;"
答案 1 :(得分:0)
变化:
csearch.AutoCompleteCustomSource.Add(hh("Taj"))
要:
csearch.AutoCompleteCustomSource.Add(hh("Taj").ToString())
答案 2 :(得分:0)
奇怪的是,它会得到该转换错误,但问题是您正在从工作线程访问ComboBox的属性。您永远不应该从另一个线程访问控件或表单。您需要在UI线程上执行所有UI工作。这样做的典型方法是使用表单或控件的Invoke
方法。
答案 3 :(得分:-1)
是使用&符号代替加号。 VB.net不将+解释为串联(加号用于基于C的语言)。如果这不能解决您的错误,请在代码周围使用“try catch”块进行测试。请参阅下面的示例。
在捕获点上添加一个断点。使用手表检查有关错误的所有信息。