Доступ к запущенному фоновому потоку VB.NET VS2008 - PullRequest
1 голос
/ 24 марта 2012

Я создал фоновый поток, который получает данные и возвращает их в основной поток; это работает. Теперь я хочу, чтобы иметь возможность остановить запрос 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

Как получить доступ к фоновому потоку, чтобы остановить запрос по запросу?

Нужно ли устанавливать флаг в главном потоке, говорящий фоновому потоку о прекращении работы, а затем заставлять фоновый поток опрашивать основной поток с интервалами?

Любая помощь будет оценена. Я пытался найти пример, но не смог найти хороший. Даже псевдокод поможет

Спасибо.

1 Ответ

0 голосов
/ 24 марта 2012

Метод DataAdapter.Fill является синхронным, что означает, что он блокирует текущий поток до его завершения. По сути, это означает, что вы не можете добавить опрос / проверку в фоновом потоке, поскольку все, что он может сделать, это выполнить метод Fill (который может занять много времени).

Если ваша проблема заключается в остановке самой операции (обратите внимание, что никакие данные не могут быть возвращены), вам следует просто вызвать thread.Abort () из основного потока. Для этого вам нужно сохранить thrGetData как переменную уровня класса. Подробнее о Thread.Abort () можно узнать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...