【问题标题】:WinSCP .NET assembly: Set a custom event handler to Session.FileTransferred in C++/CLIWinSCP .NET 程序集:在 C++/CLI 中将自定义事件处理程序设置为 Session.FileTransferred
【发布时间】:2014-04-15 09:01:01
【问题描述】:

对不起,我有一个具体的问题。是的,这与为事件设置自定义事件处理程序有关。是的,这类问题可能已经被问过很多次了,但这里我只限于 WinSCP 的情况。

参考Session.SynchronizeDirectories方法中的例子:
http://winscp.net/eng/docs/library_session_synchronizedirectories

我正在将 C# 示例转换为 C++/CLI,但遇到了问题。

在 C# 中,设置为:

Session session = new Session();
session.FileTransferred += FileTransferred;
...
private static void FileTransferred(object sender, TransferEventArgs e)
{
    ....
}

在 C++/CLI 中,我执行以下操作:

WinSCP::Session ^ session = gcnew WinSCP::Session();
session->FileTransferred += gcnew EventHandler(FileTransferred);
...

static void FileTransferred(System::Object ^sender, WinSCP::TransferEventsArgs ^e)
{
    ....
}

但我收到此错误:

函数 FileTransferred() 与委托类型“void (System::Object ^, System::EventArgs ^)”不匹配。

我尝试更改为FileTransferred(System::Object ^sender, EventArgs ^e),但随后FileTransferred() 的整个正文都失效了。

【问题讨论】:

    标签: c# c++-cli winscp winscp-net eventhandler


    【解决方案1】:
      session->FileTransferred += gcnew EventHandler(FileTransferred);
    

    EventHandler 是错误的委托类型。您需要改为创建 WinSCP FileTransferredEventHandler 委托。修复:

      session->FileTransferred += gcnew WinSCP::FileTransferredEventHandler(FileTransferred);
    

    注意你也拼错了 WinSCP::TransferEventsArgs,one s too many。

    【讨论】:

      【解决方案2】:

      其实我离答案只有一步之遥。

      在 C# 中,在 session.FileTransferred 之后键入 += 后,系统提示我点击 Tab 按钮。然后我看到了以下内容:

      session.FileTransferred += new FileTransferredEventHandler(FileTransferred);
      

      这个FileTransferredEventHandler() 可以获取正确的函数签名FileTransferred(object sender, TransferEventArgs e)(而不是要求FileTransferred(object sender, EventArgs e)

      我回到 C++/CLI 并做同样的事情:

      session->FileTransferred += gcnew FileTransferredEventHandler(FileTransferred);
      

      编译。没有抱怨。

      【讨论】:

        猜你喜欢
        • 2012-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多