【问题标题】:Public Background worker公共后台工作者
【发布时间】: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


【解决方案1】:

我想,你知道这个网站:https://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx

我第一次与后台工作人员打交道时,遇到了和你一样的问题。这是您的问号代码:

AddHandler bw.DoWork, AddressOf bw_DoWork
AddHandler bw.ProgressChanged, AddressOf bw_ProgressChanged
AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted

记得阅读上面的链接,因为这个来自 microsoft 的 howto 有一个很好的例子来运行一个后台工作者。

没有问题,如果你希望将它放在一个类中并创建一个类的实例来运行 BGW。如果是这样,您应该编写一个 Public Sub,它启动 Private BGW。

【讨论】:

    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多