使用从另一个方法在一个方法中创建的类实例

时间:2015-03-02 11:04:16

标签: vb.net winscp winscp-net

我现在已经在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

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

我需要在应用程序中执行的任何其他操作,无法打开Session,因为我无法在此处进行多次“Public Sub Open”。如果这里有任何WinSCP人员,我可以让会话保持活动直到申请被关闭吗?在同一表格上多次巧妙地“开会”?

我觉得很难解释。

例:
我有一个自动收报机/计时器,刷新表格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)使其能够通过表格保持活力,或者?

这里有人建议吗?

1 个答案:

答案 0 :(得分: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)