У меня есть приложение, которое запускает фоновый поток, который открывает сеанс 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
.
Thread.Sleep
как в основной, так и в фоновый поток. Если я запускаю приложение (проверено на Windows 7 и 10) и закрываю его, или даже если я резко останавливаю его из диспетчера задач, подпроцесс WinSCP полностью исчезает. Этого и следовало ожидать, поскольку подпроцесс выполняется в том же задании Windows как код .NET, так что это операционная система, которая позаботится об этом, независимо от того, что делает код .NET. Поэтому нам потребуется больше подробностей, чтобы воспроизвести проблему. Пожалуйста, опубликуйте минимально воспроизводимый пример. - person Martin Prikryl   schedule 13.12.2018using
. Я не хочу, чтобы это закончилось. Просто когда я закрываю приложение, фоновый поток закрывается, а сеанс — что бы он ни делал в это время (и он делает то, что я упомянул) — должен быть удален блокомusing
. Просто так не бывает - person Angelo   schedule 13.12.2018