0

我已经在这里摸索了几天WinSCP,我所缺少的只是正确地“打开会话”。

这里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

这在这里有效。此时似乎根据需要打开了会话。但是我的问题出现在我需要在同一个表单中多次打开会话的地方,因为它本身不会保持打开状态,如果可能的话。

我需要在应用程序中做的任何其他事情都无法打开会话,因为我不能有几个“公共子打开”。如果这里有任何 WinSCP 人员,我可以让会话保持活动状态直到应用程序关闭吗?在同一个表单上多次“打开会话”的任何聪明方法?

我觉得很难解释。

示例:
我有一个自动收报机/计时器,它刷新位于 Form 1 (
Objectlist1) 上的列表,它每 5 秒计时一次。

这是使用的代码:

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)内容以使其能够在整个表单中保持活力,或者?

这里有什么建议吗?

4

1 回答 1

1

首先,您正在初始化一个大概的全局变量或类字段mySession,正如您在Initialize Global Variable .Net中得到的建议:

    mySession = New Session()

但是随后您声明了一个具有相同名称的局部变量(它隐藏了其余范围的全局变量):

    Using mySession As Session = New Session     

然后你打开本地的

        mySession.Open(mySessionOptions)

立即关闭它

    End Using

全局mySession永远不会打开。

你需要做:

    mySession = New Session()

    mySession.Open(mySessionOptions)
于 2015-03-02T12:03:16.430 回答