使用在一个方法中从另一个方法创建的 class 实例
Using a class instance created in one method from an another method
我已经在这里摸索了几天 WinSCP,我所缺少的只是 "Open the Session" 正确。
此处 Session
已初始化。
Private Sub Loginbutton_Click(sender As Object, e As EventArgs) Handles Loginbutton.Click
mySession = New Session()
Dim mySessionOptions As New SessionOptions
With mySessionOptions
.Protocol = Protocol.Sftp
.HostName = "192.168.0.247"
.UserName = "usr"
.Password = "pw"
.SshHostKeyFingerprint = "ssh-rsa KEY"
End With
Using mySession As Session = New Session
mySession.Open(mySessionOptions)
End Using
Form1.Show()
Me.Close()
End Sub
在下面的表格中我需要再次使用Session
,这里我使用了
Public Sub Open(ByVal sessionOptions As SessionOptions)
Me.Show()
For Each i As RemoteFileInfo In mySession.ListDirectory("/Database/").Files
Objectlist1.Items.Add(i.Name)
Next
Objectlist1.Refresh()
End Sub
这里就可以了。
此时似乎根据需要打开会话。但是我的问题是我需要在同一个表单中多次打开会话,因为它不会自己保持打开状态,如果可能的话。
我需要在应用程序中做的任何其他事情都无法打开会话,因为我不能有多个 "Public Sub Open" 在线。如果这里有任何 WinSCP 人员,我可以让会话保持活动状态直到应用程序关闭吗? "Opening the Session" 在同一张表格上有什么巧妙的方法吗?
我很难解释。
示例:
我有一个 ticker/timer,它刷新位于 Form 1 (Objectlist1)
上的列表
它每 5.th 秒跳动一次。
这是使用的代码:
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
Objectlist1.Clear()
For Each i As RemoteFileInfo In mySession.ListDirectory("/Database").Files
Objectlist1.Items.Add(i.Name)
Next
End Sub
问题是,当它滴答作响时,我得到
会话未打开,System.InvalidOperationException
基本上是..会话未打开..现在,由于它在表单中进一步打开,我显然需要再次打开它?或者我可以在
Public Sub Open(ByVal sessionOptions As SessionOptions)
使其能够在整个表单中保持活力,或者?
各位有什么建议吗?
首先,您正在初始化一个可能的全局变量或 class 字段 mySession
,正如您在 :
处得到的建议
mySession = New Session()
但是你声明了一个同名的局部变量(它隐藏了作用域其余部分的全局变量):
Using mySession As Session = New Session
你打开本地:
mySession.Open(mySessionOptions)
和立即关闭它:
End Using
全局 mySession
从未 打开。
您需要做的:
mySession = New Session()
mySession.Open(mySessionOptions)
我已经在这里摸索了几天 WinSCP,我所缺少的只是 "Open the Session" 正确。
此处 Session
已初始化。
Private Sub Loginbutton_Click(sender As Object, e As EventArgs) Handles Loginbutton.Click
mySession = New Session()
Dim mySessionOptions As New SessionOptions
With mySessionOptions
.Protocol = Protocol.Sftp
.HostName = "192.168.0.247"
.UserName = "usr"
.Password = "pw"
.SshHostKeyFingerprint = "ssh-rsa KEY"
End With
Using mySession As Session = New Session
mySession.Open(mySessionOptions)
End Using
Form1.Show()
Me.Close()
End Sub
在下面的表格中我需要再次使用Session
,这里我使用了
Public Sub Open(ByVal sessionOptions As SessionOptions)
Me.Show()
For Each i As RemoteFileInfo In mySession.ListDirectory("/Database/").Files
Objectlist1.Items.Add(i.Name)
Next
Objectlist1.Refresh()
End Sub
这里就可以了。 此时似乎根据需要打开会话。但是我的问题是我需要在同一个表单中多次打开会话,因为它不会自己保持打开状态,如果可能的话。
我需要在应用程序中做的任何其他事情都无法打开会话,因为我不能有多个 "Public Sub Open" 在线。如果这里有任何 WinSCP 人员,我可以让会话保持活动状态直到应用程序关闭吗? "Opening the Session" 在同一张表格上有什么巧妙的方法吗?
我很难解释。
示例:
我有一个 ticker/timer,它刷新位于 Form 1 (Objectlist1)
上的列表
它每 5.th 秒跳动一次。
这是使用的代码:
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
Objectlist1.Clear()
For Each i As RemoteFileInfo In mySession.ListDirectory("/Database").Files
Objectlist1.Items.Add(i.Name)
Next
End Sub
问题是,当它滴答作响时,我得到
会话未打开,System.InvalidOperationException
基本上是..会话未打开..现在,由于它在表单中进一步打开,我显然需要再次打开它?或者我可以在
Public Sub Open(ByVal sessionOptions As SessionOptions)
使其能够在整个表单中保持活力,或者?
各位有什么建议吗?
首先,您正在初始化一个可能的全局变量或 class 字段 mySession
,正如您在
mySession = New Session()
但是你声明了一个同名的局部变量(它隐藏了作用域其余部分的全局变量):
Using mySession As Session = New Session
你打开本地:
mySession.Open(mySessionOptions)
和立即关闭它:
End Using
全局 mySession
从未 打开。
您需要做的:
mySession = New Session()
mySession.Open(mySessionOptions)