1

我创建了一个后台线程来获取数据并将其返回到主线程;这行得通。现在我希望能够停止来自主线程的 SQL 请求(可能是单击按钮)。

这是我创建线程(工作)的测试代码:

Private Sub GetSql()
    If (Me.InvokeRequired) Then
        Me.Invoke(New GetSqlDelegate(AddressOf GetSql))
    Else
        Dim da As SqlDataAdapter = New SqlDataAdapter("select * from database", _
            New SqlConnection(connectionString))
        dt = New DataTable
        da.Fill(dt)
        Me.BeginInvoke(New BindDataToGridDelegate(AddressOf BindDataToGrid))
    End If
End Sub

Private Delegate Sub BindDataToGridDelegate()
Private Sub BindDataToGrid()
    DataGridView1.DataSource = dt
    dt = Nothing
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    thrGetData = New Thread(AddressOf ThreadBackgroundData)
    thrGetData.IsBackground = True
    thrGetData.Start()
End Sub

如何访问后台线程以按需停止查询?

我是否需要在主线程上设置一个标志,告诉后台线程停止运行,然后让后台线程每隔一段时间轮询主线程?

任何帮助,将不胜感激。我试图寻找一个例子,但我找不到一个好的例子。即使是伪代码也会有所帮助

谢谢。

4

1 回答 1

0

DataAdapter.Fill 方法是同步的,这意味着它会阻塞当前线程,直到它完成。基本上,这意味着您不能在后台线程中添加轮询/检查,因为它所能做的就是执行 Fill 方法(这可能很耗时)。

如果您的问题是停止操作本身(请注意,可能不会返回任何数据),您应该只从主线程调用 thread.Abort()。为此,您需要将 thrGetData 保存为类级变量。更多关于 Thread.Abort() 的信息可以在这里找到。

于 2012-03-23T21:33:08.750 回答