У меня есть несколько программ opencv на некоторых Linux компьютерах. Теперь я хочу сделать программу c# в качестве переключателя на компьютере windows, чтобы открыть эту программу opencv.
У меня есть оригинальный код, который может открыть программу opencv
public void TrySomeSSh()
{
ConnectionInfo conInfo = new ConnectionInfo(ip, _port, _username, new AuthenticationMethod[]{
new PasswordAuthenticationMethod(_username,_password)});
SshClient sshClient = new SshClient(conInfo);
sshClient.Connect();
if (sshClient.IsConnected)
{
SshCommand output1;
output1 = sshClient.RunCommand("export DISPLAY=\"127.0.0.1:10.0\" ; /home/MyName/MyOpencvProgram ");
Console.WriteLine(output1.CommandText);
Console.WriteLine(output1.Execute());
}
else
{
Console.WriteLine("not connected");
}
sshClient.Disconnect();
sshClient.Dispose();
}
Однако есть некоторые проблемы:
программа c# зависнет, потому что программа opencv все еще работает. Я не могу выполнять другие задания в моей программе c#.
после отключения программа opencv на удаленном компьютере будет одновременно уничтожена.
Теперь я могу написать что-то вроде этого:
public void TrySomeSSh()
{
ConnectionInfo conInfo = new ConnectionInfo(ip, _port, _username, new AuthenticationMethod[]{
new PasswordAuthenticationMethod(_username,_password)});
SshClient sshClient = new SshClient(conInfo);
sshClient.Connect();
if (sshClient.IsConnected)
{
ShellStream shellStream = sshClient.CreateShellStream(string.Empty, 0, 0, 0, 0, 0);
shellStream.WriteLine("export DISPLAY=\"127.0.0.1:10.0\"");
shellStream.WriteLine("/home/MyName/MyOpencvProgram &");
shellStream.WriteLine("disown -a");
string line;
while ((line = shellStream.ReadLine(TimeSpan.FromSeconds(2))) != null)
{
string s = shellStream.Read();
Console.Write(s);
}
}
else
{
Console.WriteLine("not connected");
}
Console.WriteLine("end connect");
sshClient.Disconnect();
sshClient.Dispose();
}
как-то это может работать,
, но
Я не могу найти ни одного способ сделать это с помощью SshCommand, так как ShellStream не рекомендуется.
TimeSpan.FromSeconds (2) не совсем понятно, достаточно ли 2 секунды или нет.
Как правильно это сделать?