Я пишу простую программу для тестирования различных функций VB.NET, позже я буду использовать ее в гораздо более сложной программе. Идея состоит в том, чтобы отправить сообщение через последовательный порт com5. Сообщение будет взято из того, что введено в текстовое поле приложения. Фоновый работник (активируется при нажатии кнопки с надписью «Отправить») непрерывно передает сообщение. Существует также ярлык, который ничего не делает.System.ObjectDisposedException в многопоточном приложении
Imports System.ComponentModel
Public Class Form1
Dim message
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
message = TextBox1.Text
If BackgroundWorker1.IsBusy = False Then
BackgroundWorker1.RunWorkerAsync()
End If
End Sub
Sub SendSerialData(ByVal data As String)
' Send strings to a serial port.
Try
Using com5 As IO.Ports.SerialPort =
My.Computer.Ports.OpenSerialPort("COM5")
com5.WriteLine(data)
End Using
Catch ioex As System.IO.IOException
TextBox1.Text = ("COM5 Not Found!")
End Try
End Sub
Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
While (True)
SendSerialData(message)
End While
End Sub
End Class
Первоначально я использовал Application.DoEvents(), но это было медленно, и я слышал, что это была плохая практика программирования. (У этого, однако, не было ошибок.) Поэтому я переписал программу, используя фонового работника. Теперь программа работает нормально во время работы, но в закрытом состоянии, это выскакивает:
System.ObjectDisposedException было необработанное сообщение: необработанное исключение типа «System.ObjectDisposedException» произошло в mscorlib.dll Дополнительная информация: Безопасная ручка была закрыта
Я считаю, что это что-то делать с фоном рабочим, потому что если программа будет закрыта, и я не побежал фон рабочего, ошибка не появляется. Я попытался помещать try-catch внутри каждой подпрограммы в программу (включая изменение типа исключения для catch в SendSerialData как любое исключение), безрезультатно. Это мой первый пост в случае проблем, которые вы можете свободно комментировать.
Компьютер подключен к микроконтроллеру, подключенному к двигателю, который считывает последовательный вход. Без цикла двигатель вращается в течение секунды или около того, а затем останавливается. Как я могу настроить его на непрерывное вращение без петли? – TeslaK20