c# - 退出应用程序时关闭使用的 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
编辑:添加了更多在块中发生的事情。
解决方案
您可以使用 Session.Dispose 方法来杀死底层进程。
请参阅 WinSCP 的此文档:https ://winscp.net/eng/docs/library_session_dispose
另请注意本文中的文字:
如果会话已打开,则关闭它,终止底层 WinSCP 进程,删除 XML 日志文件并释放对象。
与 Session.Close 不同,之后无法重用该对象。
推荐阅读
- swift - 快速包装时意外发现 nil
- regex - 用于收集括号 () 之间的值的正则表达式
- angular - 角度 4/5/6 波纹效果指令
- postgresql - 列“ard.created_by”必须出现在 GROUP BY 子句中或在聚合函数中使用
- c++ - 如何防止外部“C”函数重载?
- javascript - 字符串和函数的 React Ref 属性之间的区别
- python-3.x - 我如何提取两个单词并加入它们以在词干文件中查找它们 - python
- c# - 公共静态变量每次都覆盖并关闭请求
- amazon-web-services - 如何从 AWS Glacier 永久恢复到 S3?
- javascript - Javascript - 在数组中定位特定索引