为什么我这个BkWorker.CancelAsync()不管用,停止不了呢??

yeliqin123 2009-05-11 04:25:14

Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.IO.Ports
Imports System.Text



Public Class Form_main
Dim rs232 As SerialPort
Dim comflag As Boolean
Delegate Sub SetTextCallback(ByVal InputString As String)


Private Sub Form_main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

With Me
.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi
.StartPosition = FormStartPosition.CenterScreen
.WindowState = FormWindowState.Maximized
.MaximizeBox = True
.MinimizeBox = True
.AutoScroll = True
End With
For Each sp As String In SerialPort.GetPortNames
TStripCmbCOM.Items.Add(sp)
Next
TStripCmbCOM.Sorted = False
TStripCmbCOM.SelectedIndex = 0
comflag = False
com_flag()

End Sub
Sub int_com()
Dim mbaudrate As Integer
Dim mparity As Parity
Dim mdatabit As Integer
Dim mstopbit As StopBits
Dim mportname As String

mportname = TStripCmbCOM.SelectedItem.ToString
mbaudrate = 9600
mparity = Parity.None
mdatabit = 8
mstopbit = StopBits.Two
rs232 = New SerialPort(mportname, mbaudrate, mparity, mdatabit, mstopbit)
End Sub
Sub com_flag()
If comflag = True Then

TStripBtnOnLine.Enabled = False
TStripBtnDownLine.Enabled = True
Else

TStripBtnOnLine.Enabled = True
TStripBtnDownLine.Enabled = False
End If
End Sub





Private Sub TStripBtnOnLine_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TStripBtnOnLine.Click
'rs232.ReceivedBytesThreshold = 1
int_com()
rs232.Encoding = Encoding.Default
If Not rs232.IsOpen Then
rs232.Open()
comflag = True
com_flag()
BkWorker.WorkerSupportsCancellation = True
BkWorker.RunWorkerAsync()

Else
MsgBox("通信端口打开错误 ", MsgBoxStyle.Critical Or MsgBoxStyle.OkCancel)
End
End If


End Sub

Private Sub BkWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BkWorker.DoWork
'GetRs232Data()
System.Threading.Thread.Sleep(1000)
If BkWorker.CancellationPending Then
e.Cancel = True
Return

End If

GetRs232Data()
End Sub
Private Sub GetRs232Data()
Dim instring As String
instring = ""
If Not rs232.IsOpen Then Exit Sub
Try
rs232.ReadTimeout = 1000
instring = rs232.ReadExisting()
If instring.Length = 0 Then
Exit Sub
Else
DisplayText(instring)

End If


Catch ex As Exception
MessageBox.Show("读取错误" + ex.ToString, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

End Try
End Sub
Private Sub DisplayText(ByVal comdata As String)
If Me.TxtDisplay.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf DisplayText)
Me.Invoke(d, New Object() {comdata})
Else
Me.TxtDisplay.Text += comdata

End If
End Sub

Private Sub BkWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BkWorker.RunWorkerCompleted
If Not BkWorker.CancellationPending Then
BkWorker.RunWorkerAsync()
End If
End Sub

Private Sub TStripBtnDownLine_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TStripBtnDownLine.Click
If rs232 Is Nothing OrElse Not rs232.IsOpen Then
MsgBox("通信端口尚未打开", MsgBoxStyle.Critical Or MsgBoxStyle.OkCancel)
Else
'rs232.ReceivedBytesThreshold = 0
BkWorker.Dispose()
BkWorker.CancelAsync()
comflag = False
com_flag()
rs232.Close()
End If


End Sub
End Class



...全文
217 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeliqin123 2009-05-12
  • 打赏
  • 举报
回复
BKWorker.dispose()和这句没关系吧??是释放线程所使用的资源
yeliqin123 2009-05-12
  • 打赏
  • 举报
回复
还是不行,是不是COM控件的问题呢????
wang450001 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wang450001 的回复:]
BkWorker.Dispose()
BkWorker.CancelAsync()


[/Quote]
上两句换个顺序或者注释掉第一句,试试看
执行dispose时应该没有关闭掉后台程序,所以再次打开时就出错啦。
wang450001 2009-05-11
  • 打赏
  • 举报
回复
BkWorker.Dispose()
BkWorker.CancelAsync()

???是不是搞错啦.
yeliqin123 2009-05-11
  • 打赏
  • 举报
回复
还是不能解决 。。。。谁知道是怎么个东东哦
rqx110 2009-05-11
  • 打赏
  • 举报
回复
.WorkerSupportsCancellation = true
yeliqin123 2009-05-11
  • 打赏
  • 举报
回复
调试时候,我点了TStripbtndownline 按钮之后,然后再点tstripbtnonline按钮就出现“backegroundworker正忙,不能同时执行多任务”。。。。是怎么回事哦???

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧