在SSH中执行长时间的命令,SSH.NET及时在文本框中返回连续显示结果。
博主管理了一个服务器集群,准备上自动巡检工具,测试在C# WINFORM应用程序中获取服务器的耗时命令时,需要及时的返回。
全部代码如下:
cs
using Renci.SshNet;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace MySecureCRT
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
new Task(() => RunCommand()).Start();
}
private void RunCommand()
{
string host = "x.x.x.x";
string username = "x";
string password = "x";
using (var client = new SshClient(host, username, password))
{
client.Connect();
var cmd = client.CreateCommand("sh high_check.sh");
var result = cmd.BeginExecute();
using (var reader = new StreamReader( cmd.OutputStream, Encoding.UTF8, true, 1024, true))
{
while (!result.IsCompleted || !reader.EndOfStream)
{
string line = reader.ReadLine();
if (line != null)
{
listBox1.Invoke((MethodInvoker)(() => listBox1.Items.Add(line + Environment.NewLine)));
}
}
}
cmd.EndExecute(result);
}
}
}
}