小编syn*_*ica的帖子

VB.NET委托和调用 - 有人可以向我解释这些吗?

我是线程世界的新手,但我正在研究的应用程序的一些方面要求我使用BackgroundWorker控件来防止UI在执行某些文件操作时冻结.

我要做的是从BackgroundWorker中更新几个表单标签.从来没有使用过这个之前我很快发现我无法访问未在同一个线程中创建的控件,因此经过一些研究后我实现了以下代码,似乎可以使一切工作:

Private Delegate Sub DelegateUpdateStatus(ByVal statusText As String, ByRef currentFile As String)

Private Sub UpdateStatus(ByVal statusText As String, ByVal currentFile As String)

    If InvokeRequired Then
        Invoke(Sub() LblStatus.Text = statusText)
        Invoke(Sub() LblCurrentFile.Text = currentFile)
    Else
        LblStatus.Text = statusText
        LblCurrentFile.Text = currentFile
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

但事情是,我不知道这个代码在做什么,或者为什么需要它.

我做了一些研究,但我没有做过任何真正的工作,我读过的大多数文章都假设了一些先验知识.

我希望了解的三个主要内容:

  • 为什么需要此代码(例如,为什么无法直接从BackgroundWorker访问控件)
  • 委托是什么,何时需要使用它
  • Invoke方法的作用,以及我使用InvokeRequired检查的内容

如上所述,线程仍然是一个非常外国的概念,所以任何简单的英语答案都会非常有用 - 谢谢!

编辑:感谢大家到目前为止的回复.我已经做了一些进一步的阅读,我想知道我是否正确地采用了这种方式.我使用BackgroundWorker的原因是为了确保在我执行文件操作时UI保持响应.问题是,我仍然需要等到BackgroundWorker完成它的工作,所以我可以返回一个指示操作成功的布尔值.有办法解决这个问题,但是从我的阅读中,不得不等待BackgroundWorker完成它的工作就是首先要破坏使用它的目的.那么,阻止UI锁定的最佳方法是什么?

vb.net delegates invoke backgroundworker

6
推荐指数
2
解决办法
3万
查看次数

标签 统计

backgroundworker ×1

delegates ×1

invoke ×1

vb.net ×1