1

クエリが長時間実行され、UI操作が実行されたときに、Windowsアプリケーションが「応答しない状態」になりました。だから私はスレッディングのコンセプトに行きました。ただし、Thread.start()メソッド内でデータベース操作を実行する場合。「Windowsアプリケーションが動作を停止しました」などのエラーが発生します

私のコード:

 Dim Newthread As New Thread(AddressOf test)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    CONNECT_STRING = "Provider=IBMDADB2.DB2COPY1;Password=pwd;Persist Security Info=True;User ID="";Data Source="";dbalias="";"
End Sub


Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)      Handles Button5.Click
    strSQL = "query"
    Newthread.Start(strSQL)
End Sub

Function test(ByVal strSQL As String)
    connection = New OleDbConnection(CON_STRING)
    connection.Open()
    Dim selectCMD As OleDbCommand = New OleDbCommand(strSQL, connection)
    Dim custDA As OleDbDataAdapter = New OleDbDataAdapter
    custDA.SelectCommand = selectCMD
    selectCMD.CommandTimeout = 0
    Dim custDS As DataSet = New DataSet()
    custDA.Fill(custDS)
    Dim chk As New DataGridViewCheckBoxColumn()
    DataGridView1.Columns.Add(chk)
    chk.HeaderText = "Select Row"
    chk.Name = "Select row"
    DataGridView1.DataSource = custDS.Tables(0)
    DataGridView1.Refresh()
End Function

'custDA.Fill(custDS) 'の行でエラーが発生しています

エラー-Windowsアプリケーションが動作を停止しました

誰かplsは私を助けることができます...

4

1 に答える 1

1

自分でスレッドを管理する代わりに、backgroundworker を見てください。

Dim bw As New Backgroundworker
bw.RunWorkerAsync

バックグラウンド ワーカーの「DoWork」イベント ハンドラで、データベース ダウンロード機能を実装します。バックグラウンド ワーカーの「RunWorkerCompleted」イベント ハンドラで、UI を更新します。

于 2012-09-10T18:14:56.563 に答える