0

我有一个带有文本框 textchanged 事件的应用程序来搜索数据库中的值。

现在它在文本框中输入字符真的很慢。我在某处读到这种情况正在发生,因为它需要为您在文本框中键入的每个字符建立与数据库的连接。但我也读到所有 sql 连接在池中保持打开状态,因此您可以再次使用它们。(那么如果池的东西是真的,那么它应该很快,对吧?)

我尝试的解决方案是实现一个计时器,以便我知道用户何时停止输入然后搜索数据库,因此它只有 1 个连接。我打字的时候速度很好,但是因为它现在出现在另一个线程上,我需要在 page_load 中实现这个规则

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False

但现在我在 datagridview 上遇到了各种错误,还有一些我不理解的奇怪行为。

所以我的问题是:是否有另一种解决方案来加快速度,或者计时器事件是唯一的解决方案。

提前致谢

4

1 回答 1

1

不要使用CheckForIllegalCrossThreadCalls = False!如果你不想阻塞你的 UI 线程,你必须在后台运行(时间)昂贵的操作。

Private Sub ExpensiveFoo(s As String)
    If Me.InvokeRequired Then
        System.Threading.Thread.Sleep(1000)
        Me.Invoke(Sub() ExpensiveFoo(s))
    Else
        TextBox2.Text = s
    End If


End Sub


Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged

    Console.WriteLine(TextBox1.Text)
    Dim s As String = TextBox1.Text
    Task.Run(Sub() ExpensiveFoo(s))

End Sub

TextChanged 事件现在只需启动一个task它将在后台执行一些工作,完成后将更新第二个文本框 - 不使用可怕的CheckForIllegalCrossThreadCalls = False

于 2012-12-13T10:26:54.667 回答