使用和调用EventHandlers的问题

时间:2014-09-26 00:29:34

标签: c# event-handling console-application

我正在使用Kellerman .NET SFTP Library 而我在使用event handlers

时遇到了一些问题

根据文档,它有以下事件:

enter image description here

我对其中两个感兴趣:

  1. TransferCompleteEvent enter image description here
  2. FailureEvent
  3. enter image description here

    我想在传输完成时显示一条消息,如果连接失败则重新启动上传。

    在我的班上,我有以下内容:

    public static void uploadToSFTP()
        {
            try
            {
                SFTP myConnection = new SFTP();
                myConnection.EnableLogging();
                myConnection.HostAddress = "servername";
                myConnection.UserName = "username";
                myConnection.Password = "password";
                myConnection.CurrentDirectory = "directory";
                myConnection.Connect();
    
                //UPLOADING FILE TO SFTP SERVER
                myConnection.UploadFileAsync(yesterdaysZipFile, localZipFileName);
    
                while (myConnection.IsBusy == true)
                {
                    //PRINT HOW LONG REMAINING FROM UPLOAD
                    Console.WriteLine(myConnection.EstimatedTimeRemaining);
                }
    
                //declaring an eventhandler  
                myConnection.TransferCompleteEvent += SFTPCompleted;
                myConnection.Disconnect();
                myConnection.Dispose();
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }
        } 
    

    然后我有

     public static void SFTPCompleted(Object sender, TransferCompletedEventArgs e)
       {
           Console.WriteLine("Completed");
       }
    

    我的问题在于这一行:

    myConnection.TransferCompleteEvent += SFTPCompleted;
    

    当我使用调试器并进入此行时,它跳过并转到下一行它永远不会去

       public static void SFTPCompleted(Object sender, TransferCompletedEventArgs e)
       {
           Console.WriteLine("Completed");
       }
    

    我在这里做错了什么?

    关于FailureEvent,我甚至无法编译:

    myConnection.FailureEvent += TransferFailed;
    

    以下是此事件:

    public static void TransferFailed(Object sender, SFTP.FailureEventHandler e)
    {
       Console.WriteLine("failed");
    }
    

    我收到此编译器错误:

      

    错误1' TransferFailed'匹配委托' KellermanSoftware.NetSFtpLibrary.SFTP.FailureEventHandler'

    这是我第一次使用这个库。任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:2)

这一行:

myConnection.TransferCompleteEvent += SFTPCompleted;

附加了一个事件处理程序。

您在调用UploadFileAsync并等待它停止忙碌后附加事件处理程序。此时,事件已经被解雇,所以你错过了听到它。

创建myConnection对象后,应立即附加事件处理程序。

SFTP myConnection = new SFTP();
myConnection.TransferCompleteEvent += SFTPCompleted;   

您的第二个问题是您无法附加TransferFailed事件。那是因为你的处理函数中有错误的参数。我的猜测应该是:

public static void TransferFailed(Object sender, SFTP.FailurEventArgs e)

查看SFTP.FailureEventHandler声明。它会告诉你需要的参数。