【发布时间】:2014-03-13 07:40:05
【问题描述】:
我必须在任何桌子上显示许多交易。需要很长时间来处理。 我想在 Visual Basic 2010 中使用后台进程,但它总是给出类似“检测到跨线程操作”的错误消息。我尝试了很多我在互联网上找到的方法,但仍然找不到问题所在。 请帮助我解决这个问题。 这是我的代码:
Private Sub CHK_A_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHK_A.CheckedChanged
Disabled()
P_Panel.Visible = True
B_Worker.RunWorkerAsync()
End Sub
Private Sub BTN_Search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_Search.Click
USP_Select_Registration()
End Sub
Private Sub B_Worker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles B_Worker.DoWork
Threading.Thread.Sleep(25)
USP_Select_Registration()
End Sub
Private Sub B_Worker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles B_Worker.RunWorkerCompleted
P_Panel.Visible = False
End Sub
这是我的存储过程
Public Sub USP_Select_Registration()
Dim Con As New SqlConnection(SQLCon)
Try
Con.Open()
Dim Cmd As New SqlCommand("USP_Select_Registration", Con)
Cmd.CommandType = CommandType.StoredProcedure
Cmd.Parameters.Add("@Check", SqlDbType.Bit).Value = CHK_A.EditValue
Cmd.Parameters.Add("@Month", SqlDbType.Int).Value = CBO_Month.SelectedIndex + 1
Cmd.Parameters.Add("@Year", SqlDbType.Int).Value = SPE_Year.EditValue
Cmd.Parameters.Add("@Search", SqlDbType.VarChar, 150).Value = TXT_Search.Text
DS_Registration.Tables("MST_Registration").Clear()
Dim Adt As New SqlDataAdapter(Cmd)
Adt.Fill(DS_Registration.Tables("MST_Registration"))
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
Finally
Con.Close()
End Try
End Sub
【问题讨论】:
-
我很抱歉英语不好
-
Dim worker As BackgroundWorkerin dowork .. 尝试删除或将其设为评论 -
它给出了同样的错误
-
尝试对 btn_search_click 执行相同操作 ...
-
它没有任何区别,实际上我已经全部删除了(Dim worker As BackgroundWorker)
标签: vb.net multithreading visual-studio-2010 backgroundworker background-process