首页 > 解决方案 > 退出应用程序时关闭使用的 WinSCP 会话(在使用中)

问题描述

我有一个运行后台线程的应用程序,该线程打开一个用于执行操作的 WinSCP 会话,如下所示:

new Thread(() => {

    //do stuff
    SessionOptions options = new SessionOptions
    {
        //options
    };

    using(Session session = new Session())
    {
        bool success = false;
        foreach (var ip in IPs)
        {
            options.HostName = ip.Value;
            try
            {
                session.Open(options);
                success = true;
                break;
            }
            catch (Exception)
            {

            }
        }
        if(success)
        {
            CommandExecutionResult result = session.ExecuteCommand(*some command*);
            result.Check();
            someVariable = result.Output;
        }
    }

    //do stuff
})
{
    IsBackground = true
}.Start();

现在我注意到,如果我在 中关闭应用程序using,线程确实会停止,但 WinSCP 会话仍然打开(可能是因为线程被中止?),如果我重复这个过程,我当然会得到更多的 WinSCP 会话。如何关闭我在应用程序中打开的特定会话?

using编辑:添加了更多在块中发生的事情。

标签: c#.netmultithreadingwinscpwinscp-net

解决方案


您可以使用 Session.Dispose 方法来杀死底层进程。

请参阅 WinSCP 的此文档:https ://winscp.net/eng/docs/library_session_dispose

另请注意本文中的文字:

如果会话已打开,则关闭它,终止底层 WinSCP 进程,删除 XML 日志文件并释放对象。

与 Session.Close 不同,之后无法重用该对象。


推荐阅读