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は、バックグラウンドでいくつかの作業を実行するだけで開始し、完了すると、2番目のテキストボックスを更新します-恐ろしいものを使用せずにCheckForIllegalCrossThreadCalls = False

于 2012-12-13T10:26:54.667 に答える