【发布时间】:2018-01-10 14:26:45
【问题描述】:
那么使用这个解决方案来实现后台工作者(https://msdn.microsoft.com/ru-ru/library/cc221403(v=vs.95).aspx),我怎样才能实现它的公共版本?我不想在我的所有表单中增加这段代码(我有大约 4 个表单,我想在所有表单中都使用后台工作人员)。基本上,我想创建 1 个类并将该类用作“主”(只需通过开始/取消按钮、进度条和子程序的控制,它们应该在“工作”下工作)。
你能告诉我一个方法吗?我尝试了很多员工,但我不确定正确性。例如,我应该为此目的使用公共事件和委托吗?
提前谢谢你
//我对“master”backgroundworker的建议。对不起,这是未经测试的代码,我只是放草稿。
Public class BgW
'Event for start/cancel button. On each form there is button which raise
'this event and then this event raise procedure to
'start/cancel process (event passes arguments like
'sender of the button to distinguish start or cancel 'button)
Public btnclick Event (sender,e)
Dim WithEvents as Bgw
Public Sub New()
InitializeComponent()
bw.WorkerReportsProgress = True
bw.WorkerSupportsCancellation = True
'??? - will trigered to implement below procedure
AddHandler ??????, AddressOf bw_DoWork
AddHandler ?????, AddressOf bw_ProgressChanged
AddHandler ??????, AddressOf bw_RunWorkerCompleted
End Sub
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BgW.btnclick 'this is a triger to run this procedure
'Depends on sender I will do next controls
sender(start).Enabled = False
sender(cancel).Enabled = True
TestWorker = New System.ComponentModel.BackgroundWorker
TestWorker.WorkerReportsProgress = True
TestWorker.WorkerSupportsCancellation = True
TestWorker.RunWorkerAsync()
End Sub
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BgW.btnclick 'this triger to stop worker
TestWorker.CancelAsync()
End Sub
Private Sub TestWorker_DoWork(SomeSub As Sub, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles TestWorker.DoWork
If TestWorker.CancellationPending Then
Exit For
Else
'implement procedure. I will pass some sub to implement it here.
SomeSub()
End If
End Sub
end class
我知道我对后台工作人员的了解很差,但这是我的愿景。请帮助我如何解决这个问题。
【问题讨论】:
-
好吧,然后向我们展示您的尝试。这让我们更容易。
-
对不起,我刚写完。我的想法是在我的应用程序中使用以下程序。传递按钮的发送者并使用公共事件,但它不起作用。我花了很多时间,最后只是删除所有内容并将我想让它工作的方式放在这里。这不是正确的代码,我只是为了抓住我的想法。有没有人对此有初步的解决方案?
标签: vb.net backgroundworker public