0

我使用来自 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
4

4 回答 4

0

奇怪的是它会出现转换错误,但问题是您正在从工作线程访问 ComboBox 的属性。您永远不应该从另一个线程访问控件或表单。您需要在 UI 线程上完成所有 UI 工作。典型的方法是使用窗体或控件的Invoke方法。

于 2012-05-03T15:06:29.280 回答
0

我们需要知道它在哪一行失败,但一目了然,尝试使用 & 符号而不是加号来连接 VB 中的字符串。

connetionString = "Data Source=" & Application.StartupPath & "\Mydatabase.db;"
于 2012-05-03T14:04:04.387 回答
0

改变:

 csearch.AutoCompleteCustomSource.Add(hh("Taj"))

至:

 csearch.AutoCompleteCustomSource.Add(hh("Taj").ToString())
于 2012-05-03T14:24:20.983 回答
-1

是的,使用与号而不是加号。VB.net 不将 + 解释为连接(加号用于基于 C 的语言)。如果这不能解决您的错误,请在代码周围使用“try catch”块进行测试。请参阅下面的示例。

在 catch 上添加一个断点。使用手表检查有关错误的所有信息。

于 2012-05-03T14:18:15.163 回答