Столкнулся с проблемой. Есть форма (Threadform), на ней две кнопки: start (bStart) и stop (bStop), и TextBox (tBox). Задача такая, чтобы при нажатии на Start запускался цикл и выводил на TextBox сообщения, а при нажатии Stop он заканчивал свою работу, но все это должно деалаться не в главном потоке, т.к. нужен доступ к пользовательскому интерфейсу, а он, в связи с тем, что цикл непрерывный, не отвечает на команды пользователя. Я испльзовал здесь метод BeginInvoke, думаю, что реализовать идею можно только с его применением. Но результат отрицательный, форма не отвечает на команды. В чем кроется проблема, друзья?
Код | Imports System.Threading Public Class Threadform Private StopFlag As Boolean Delegate Sub InvokeDelegate() Public Sub Print(ByVal Message As String) With tBox .SelectionStart = .Text.Length .SelectedText = vbCrLf & Message End With End Sub
Sub DoTheWork() Do Print("message...") Loop Until StopFlag End Sub Private Sub bStop_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bStop.Click StopFlag = True bStart.Enabled = True End Sub
Private Sub bStart_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bStart.Click StopFlag = False bStart.Enabled = False tBox.BeginInvoke(New InvokeDelegate(AddressOf DoTheWork)) End Sub End Class
|
|