.net 后台工作进程取消异步不工作 程序逻辑
我正在运行一个后台工作程序来读取和写入文件。为了检查是否单击了cancel按钮,我创建了一个名为“check_bgWorkerCancelled()”的方法,如果cacellation挂起,该方法应该处理所有事件 问题 当我单击“取消”按钮时,工作进程将继续运行。当我单击“后退”开始按钮时,旧进程将继续运行 代码:用于检查取消 尝试过的解决方案 我尝试过以下解决方案,但没有一个有效: 试图在DoWork事件中检查取消情况.net 后台工作进程取消异步不工作 程序逻辑,.net,vb.net,backgroundworker,.net,Vb.net,Backgroundworker,我正在运行一个后台工作程序来读取和写入文件。为了检查是否单击了cancel按钮,我创建了一个名为“check_bgWorkerCancelled()”的方法,如果cacellation挂起,该方法应该处理所有事件 问题 当我单击“取消”按钮时,工作进程将继续运行。当我单击“后退”开始按钮时,旧进程将继续运行 代码:用于检查取消 尝试过的解决方案 我尝试过以下解决方案,但没有一个有效: 试图在DoWork事件中检查取消情况 Private Sub bgWorker_Scanner_DoWork(s
Private Sub bgWorker_Scanner_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker_Scanner.DoWork
If bgWorker_Scanner.CancellationPending = True Then
e.CancelAsync()
bgWorker_Scanner.dispose()
End If
End Sub
尝试检查取消并收集垃圾
Private Sub bgWorker_Scanner_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker_Scanner.DoWork
If bgWorker_Scanner.CancellationPending = True Then
e.CancelAsync()
bgWorker_Scanner.dispose()
GC.Collect()
End If
End Sub
尝试执行上述内部Try-Catch语句
Private Sub bgWorker_Scanner_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker_Scanner.DoWork
If bgWorker_Scanner.CancellationPending = True Then
If bgWorker_Scanner.IsBusy Then
Try
e.CancelAsync()
bgWorker_Scanner.dispose()
GC.Collect()
Catch ex As Exception
MsgBox(ex.Message.ToString)
End If
End If
End Sub
有没有办法在不完全关闭表单的情况下结束后台工作程序?非常感谢您的帮助。如果
bgWorker\u Scanner.CancellationPending,则“执行某些操作e.Cancel=True如果
,则结束”。从外部调用[BackGroundWorker].CancelAsync()
。@Jimi我从一个按钮调用了CancelAsync()
。由于某种原因,现在似乎出现了一个不同的问题。。有等待光标图标,默认情况下该按钮处于禁用状态。我没有设置这个,但我想Windows是自动设置的。。除非整个操作完成,否则我无法访问该按钮:'(您显然不知道如何正确使用BackgroundWorker
。请继续学习。Post#19包含一个取消的示例。我希望您不要仍然试图在DoWork
中处理BackgroundWorker,或调用GC.Collect()
。如果在调用CancelAsync
时处于循环中,请退出循环(在e.Cancel=True
之后)。如果bgWorker\u Scanner.CancellationPending,则“执行某些操作,e.Cancel=True End If
。从外部调用[BackGroundWorker].CancelAsync()
。@Jimi我调用了CancelAsync()
来自按钮。由于某种原因,现在似乎出现了另一个问题。.存在等待光标图标,默认情况下该按钮处于禁用状态。我没有设置此项,但我猜Windows会自动执行。.除非整个操作完成,否则我无法访问该按钮:'(您显然不知道如何正确使用BackgroundWorker
。去学习。Post 19包含了一个取消的示例。我希望您不要仍然试图在DoWork
中处理BackgroundWorker,也不要调用GC.Collect()
。如果调用CancelAsync
时处于循环中,请退出循环(在e.Cancel=True之后)。
Private Sub bgWorker_Scanner_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker_Scanner.DoWork
If bgWorker_Scanner.CancellationPending = True Then
If bgWorker_Scanner.IsBusy Then
Try
e.CancelAsync()
bgWorker_Scanner.dispose()
GC.Collect()
Catch ex As Exception
MsgBox(ex.Message.ToString)
End If
End If
End Sub