我只是在通过课程的方式工作,在vb.net上做一个项目,有些事情我想不通。
在我的代码中,我有这个类(你不需要阅读它,它只是将文件从路径A复制到B):
Public Class FileCopyExample
Public Sub New()
Dim progressForm As New ProgressForm()
progressForm.Show()
End Sub
Public Async Function CopyFolderContentsAsync(sourceFolder As String, destinationFolder As String) As Task
If Not Directory.Exists(sourceFolder) Then
Throw New DirectoryNotFoundException($"Source folder '{sourceFolder}' not found.")
End If
If Not Directory.Exists(destinationFolder) Then
Directory.CreateDirectory(destinationFolder)
End If
Dim files = Directory.GetFiles(sourceFolder)
Dim tasks As New List(Of Task)()
For Each file In files
Dim fileName = Path.GetFileName(file)
Dim destinationFilePath = Path.Combine(destinationFolder, fileName)
tasks.Add(CopyFileAsync(file, destinationFilePath))
Next
Dim subFolders = Directory.GetDirectories(sourceFolder)
For Each subFolder In subFolders
Dim folderName = Path.GetFileName(subFolder)
Dim destinationSubFolder = Path.Combine(destinationFolder, folderName)
tasks.Add(CopyFolderContentsAsync(subFolder, destinationSubFolder))
Next
Await Task.WhenAll(tasks)
End Function
Private Async Function CopyFileAsync(sourcePath As String, destinationPath As String) As Task
Using sourceStream As FileStream = File.OpenRead(sourcePath)
Using destinationStream As FileStream = File.Create(destinationPath)
Await sourceStream.CopyToAsync(destinationStream)
End Using
End Using
End Function
End Class
我想做的是打开一个带有一个小ProgressBar对象的表单,以显示文件传输过程的进展。
所以我创建了另一个类,它打开一个表单并在上面添加一个进度条。
Public Class ProgressForm
Inherits Form
Public progressBar As New ProgressBar()
Public startButton As New Button()
Public Sub New()
InitializeComponents()
End Sub
Private Sub InitializeComponents()
Me.Text = "Progress Form"
Me.Size = New Size(300, 150)
progressBar.Minimum = 0
progressBar.Maximum = 100
progressBar.Value = 0
Me.Controls.Add(progressBar)
Me.Controls.Add(startButton)
End Sub
End Class
现在,如果我想ProgressBar工作,我将需要引用对象ProgressBar(内)我的其他类(FileCopyExample),但如果我尝试这样做,我收到错误
错误BC30469对非共享成员的引用需要对象引用。
我试图将ProgressBar声明为public,但它不起作用。谁能告诉我问题出在哪里?
2条答案
按热度按时间j1dl9f461#
您对应该发生什么以及如何发生有了很好的理论理解,但是您偶然发现的细节是Visual Basic不区分大小写的事实,请参见https://learn.microsoft.com/en-us/dotnet/visual-basic/misc/bc40055
那么,我们就用刚才讨论的信息来思考这一行:
在不区分大小写的情况下,我们很快就发现
progressBar
与ProgressBar
相同,保存p和P之间的差异,这在Visual Basic中并不重要。您应该尝试将progressBar
的名称沿着更改为其他名称以及对它的引用,因为现在您的项目认为您尝试使用Shared
(类级别)属性,并且由于它们是对象级别的,因此无法这样做,即使您使用了正确的大小写,在这种不区分大小写的环境中也没有关系。eivgtgni2#
您正在尝试调用ProgressForm类的Show()方法,但该类没有Show()方法,如代码中所示:
如果您试图调用ProgressBar()的Show()方法,则必须引用ProgressBar()的示例,这是您的公共变量progressBar。
修改你的代码,像这样引用progressBar: