通过Background Worker通过另一个类VB.Net中的方法更新主窗体上的控件

甘吉

我整天都在撞墙,试图弄清楚这个问题。

我正在完成一个程序,可以简单地删除特定临时文件夹中的文件。我已经读到,有时最好为方法和变量创建单独的类。因此,我为几个方法创建了一个单独的类,以删除指定目录中的文件和文件夹。我使用的是后台工作在我的Form1中类和我打电话给我deleteFiles()从我的方法WebFixProcesses在类DoWork的事件Form1的类。我正在使用后台工作程序,以便可以轻松地将进度报告回主窗体上的进度栏。

文件被删除没有问题,但是我只是无法在主窗体上得到标签来反映当前正在删除的文件。标签没有任何变化。我知道公式是正确的,因为如果该方法在Form1中,则可以正常工作而我只是使用:

 Invoke(Sub()
     lblStatus.Text = File.ToString
     lblStatus.Refresh()
 End Sub)

这是我从WebFixProcesses调用的方法

Public Shared Sub deleteFiles(ByVal fileLocation As String)
    For Each file As String In Directory.GetFiles(fileLocation)
        Try

            fileDisplay.Add(file)
            For i = 1 To fileDisplay.Count
                file = fileDisplay(i)
                Form1.BackgroundWorker1.ReportProgress(CInt(i / fileDisplay.Count) * 100)

            Next
            IO.File.Delete(file)                
            Form1.labelText(file)
            Form1.labelRefresh()

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    Next
End Sub

labelText()labelRefresh()是我主要形式中的方法,它们使用委托来尝试将信息传递给控件:

Public Sub labelText(ByVal file As String)
    If lblStatus.InvokeRequired Then
        Dim del As New txtBoxDelegate(AddressOf labelText)
        Me.Invoke(del, file)
    Else
                   lblStatus.Text = file.ToString()
    End If

End Sub
Public Sub labelRefresh()
    If lblStatus.InvokeRequired Then
        Dim del As New txtBoxRefDelegate(AddressOf labelRefresh)
        Me.Invoke(del)
    Else
                   lblStatus.Refresh()

    End If
End Sub

如果有人可以帮助我告知我可能做错了什么,将不胜感激,因为我的头为此感到非常痛苦。也许我犯错了,只是固执地将我的方法放在自己的类中。但是任何帮助都会很棒。多谢你们!

约翰·基勒

汉斯在问题注释上写的是正确的:Form1是一个类型,而不是实例,但是为了使程序更容易(来自VB6),M $进行了“混合”,使您可以使用表单名称作为实例在主线程中的形式。

但是,仅当您在线程上时此方法才有效

如果您Form1另一个线程引用,Form1则会创建一个新实例

要解决此问题,请将以下代码添加到表单中:

Private Shared _instance As Form1
Public ReadOnly Property Instance As Form1
    Get
        Return _instance
    End Get
End Property

我们将使用此属性存储表单的当前实例。为此,请将以下行添加到Load事件中:

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    _instance = Me

    'other code here
End Sub

现在,从每个类的任何线程中,如果您使用

Form1.Instance

...您会得到实际的表格。现在,您Invoke甚至可以使用相同的形式:

    Me.instance.Invoke(Sub()
                           Me.lblStatus.Text = "Hello World"
                       End Sub)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过后台工作器使用另一类VB.Net中的方法更新主窗体上的控件

来自分类Dev

通过另一个类更新标签

来自分类Dev

通过另一个类调用方法

来自分类Dev

通过方法从另一个类引用一个类变量

来自分类Dev

如何通过在Javascript另一个类的实例访问另一个类中的方法

来自分类Dev

是否可以创建一个只能作为另一个类的成员实例但仍可以通过VB.NET公开访问的类?

来自分类Dev

如何通过Java中的方法将对象从一个类传递到另一个类

来自分类Dev

如何通过创建另一个类的对象的类访问方法?

来自分类Dev

通过方法将类实例附加到另一个类的列表变量

来自分类Dev

通过从另一个类调用方法来更新信息

来自分类Dev

如何通过另一个类更新/更改一个类的初始化参数?

来自分类Dev

如何通过PySide上的另一个线程从QMainWindow类捕获Signal?

来自分类Dev

我可以通过另一个类的方法调用python对象的字典吗?

来自分类Dev

是否可以通过此方法从另一个类获取ArrayList?

来自分类Dev

通过在MVVM中更改的属性来更改另一个类的属性?

来自分类Dev

如何通过另一个类在链中扩展顶级选择器

来自分类Dev

SpriteBatch通过时变为null?/在另一个类中绘制精灵?

来自分类Dev

如何通过使用javascript中的另一个类隐藏任何html元素?

来自分类Dev

ProtoBuffer通过gradle生成的类在IntelliJ的另一个模块中不可见

来自分类Dev

如何通过另一个窗体上的文本框更新datagridview中的选定行?

来自分类Dev

在另一个类中调用一个通过IBaction读取动态变量的函数

来自分类Dev

如何通过另一个组件中的操作将类名切换到一个组件?

来自分类Dev

为什么通过公开继承另一个类来构建类是一种较差的方法?

来自分类Dev

单击同一类中的另一个按钮时,通过 jquery 更改按钮的类更改回

来自分类Dev

通过tkinter 0中另一个类的方法将标签添加到框架类

来自分类Dev

通过使用另一个表更新表

来自分类Dev

通过调用另一个方法退出方法

来自分类Dev

通过调用另一个方法退出方法

来自分类Dev

C#:调用通过另一个抽象类实现的抽象类方法

Related 相关文章

  1. 1

    通过后台工作器使用另一类VB.Net中的方法更新主窗体上的控件

  2. 2

    通过另一个类更新标签

  3. 3

    通过另一个类调用方法

  4. 4

    通过方法从另一个类引用一个类变量

  5. 5

    如何通过在Javascript另一个类的实例访问另一个类中的方法

  6. 6

    是否可以创建一个只能作为另一个类的成员实例但仍可以通过VB.NET公开访问的类?

  7. 7

    如何通过Java中的方法将对象从一个类传递到另一个类

  8. 8

    如何通过创建另一个类的对象的类访问方法?

  9. 9

    通过方法将类实例附加到另一个类的列表变量

  10. 10

    通过从另一个类调用方法来更新信息

  11. 11

    如何通过另一个类更新/更改一个类的初始化参数?

  12. 12

    如何通过PySide上的另一个线程从QMainWindow类捕获Signal?

  13. 13

    我可以通过另一个类的方法调用python对象的字典吗?

  14. 14

    是否可以通过此方法从另一个类获取ArrayList?

  15. 15

    通过在MVVM中更改的属性来更改另一个类的属性?

  16. 16

    如何通过另一个类在链中扩展顶级选择器

  17. 17

    SpriteBatch通过时变为null?/在另一个类中绘制精灵?

  18. 18

    如何通过使用javascript中的另一个类隐藏任何html元素?

  19. 19

    ProtoBuffer通过gradle生成的类在IntelliJ的另一个模块中不可见

  20. 20

    如何通过另一个窗体上的文本框更新datagridview中的选定行?

  21. 21

    在另一个类中调用一个通过IBaction读取动态变量的函数

  22. 22

    如何通过另一个组件中的操作将类名切换到一个组件?

  23. 23

    为什么通过公开继承另一个类来构建类是一种较差的方法?

  24. 24

    单击同一类中的另一个按钮时,通过 jquery 更改按钮的类更改回

  25. 25

    通过tkinter 0中另一个类的方法将标签添加到框架类

  26. 26

    通过使用另一个表更新表

  27. 27

    通过调用另一个方法退出方法

  28. 28

    通过调用另一个方法退出方法

  29. 29

    C#:调用通过另一个抽象类实现的抽象类方法

热门标签

归档