.Net应用程序处理SQL语句时无法使用系统

Jon*_*han 0 mysql vb.net

我在VB .Net中使用MySQL连接器来执行一批SQL插件.这通常是5k语句的顺序,大约需要30分钟来处理.不幸的是,当这个进程正在运行并且我在系统上使用不同的应用程序时,在返回到.net应用程序时,它会挂起并显示"没有响应".实际上,只要我单击应用程序中的任何其他位置(例如,移动到其他选项卡),一切都会锁定.

Dim transaction As MySqlTransaction = sqlConnection.BeginTransaction()
For Each sqlCmd In (sqlCmdsCollection)
    sqlCommand = New MySqlCommand(sqlCmd, sqlConnection)
    Try
        sqlCommand.ExecuteNonQuery()
        logTxtBox.AppendText(". ")
    Catch ex As Exception
        transaction.Rollback()
        logTxtBox.AppendText(vbNewLine & "EXCEPTION: " & ex.Message & vbNewLine)
        logTxtBox.AppendText(sqlCmd & vbNewLine)
        logTxtBox.AppendText("INFO: No changes were made to the database!"& vbNewLine)
    End Try
Next
transaction.Commit()
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

有没有更有效的方法来执行这些插入?

谢谢-

乔纳森

Wim*_*dse 5

这是因为您在UI线程上调用这个长时间运行的操作,这意味着它正在阻塞,并且在运行时您无法使用UI.

对于短期运行操作,您可以创建一个处理工作并委托异步调用的委托,并使用Control.BeginInvoke确保更新UI线程上的UI.

任何超过几秒钟的事情,正如亚当指出的那样,你最好创建自己的线程并在那里处理你的工作.

话虽如此,5000插入应该不需要 30分钟运行.但这本身就是另一个问题.