vb.net class 当一个子例程从另一个 class 中 class 时重新加载
vb.net class reloads when a subroutine is classed from another class
我的 vb.net 程序加载 ClassA。在程序 运行 期间,我调用了一个 Class B 来进行一些处理。在 ClassB 处理过程中,它调用一个子程序进入 ClassA(主程序形式 class),但是当我这样做时,我发现 class 的整个初始化A再次出现,即class变量的DECLARATION再次开始,NEW子程序再次出现。
- 注意:只有当我 运行 Class B 来自后台工作人员时才会发生这种情况。如果
ClassB 是从 Form1 主线程调用的,不会出现此错误。
这是代码:
Public Class Form1
Dim g As String = "adsfadsf"
Public Sub New()
InitializeComponent()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
End Sub
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim clsB As New ClassB
clsB.st()
End Sub
Public Sub UpdateView()
' do update here
End Sub
End Class
Public Class ClassB
Public Sub st()
Form1.UpdateView()
End Sub
End Class
有什么反馈吗?
似乎后台工作者是问题所在,因为它失去了对父线程的引用。一种解决方法是将A引用传递给主线程,然后使用该引用调用特定的子程序
我试过了,效果很好
有代码吗? (还不能添加评论:/)。
每次在 ClassB 例程中进行引用时,您可能会声明一个新的 ClassA 实例。
如果 ClassA 是某种存储常用功能的模块,您可以做的是将其用作共享 class 和共享方法,如果这是真正的问题。
我的 vb.net 程序加载 ClassA。在程序 运行 期间,我调用了一个 Class B 来进行一些处理。在 ClassB 处理过程中,它调用一个子程序进入 ClassA(主程序形式 class),但是当我这样做时,我发现 class 的整个初始化A再次出现,即class变量的DECLARATION再次开始,NEW子程序再次出现。
- 注意:只有当我 运行 Class B 来自后台工作人员时才会发生这种情况。如果 ClassB 是从 Form1 主线程调用的,不会出现此错误。
这是代码:
Public Class Form1
Dim g As String = "adsfadsf"
Public Sub New()
InitializeComponent()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
End Sub
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim clsB As New ClassB
clsB.st()
End Sub
Public Sub UpdateView()
' do update here
End Sub
End Class
Public Class ClassB
Public Sub st()
Form1.UpdateView()
End Sub
End Class
有什么反馈吗?
似乎后台工作者是问题所在,因为它失去了对父线程的引用。一种解决方法是将A引用传递给主线程,然后使用该引用调用特定的子程序 我试过了,效果很好
有代码吗? (还不能添加评论:/)。
每次在 ClassB 例程中进行引用时,您可能会声明一个新的 ClassA 实例。
如果 ClassA 是某种存储常用功能的模块,您可以做的是将其用作共享 class 和共享方法,如果这是真正的问题。