同时运行多个查询C#CMD - .NET 3.5

时间:2015-11-10 13:53:06

标签: c# session cmd citrix

*Can't use Plinq as my app targets 3.5*

我正在创建一个应用程序,用户可以在其中找到当前服务器的名称。

这基本上是通过从服务器列表中查询每个服务器的用户,然后检查输出以查看用户名是否出现。如果是,则将它们连接到有问题的服务器

查找服务器名称的代码如下所示(其中name是用户名):

    public static string[] get_Session(List<string> servers, string name)
    {
       string[] sessionDetails = new string[3];

        // Iterate through serverList to find the correct connection - then add this to the sessionDetails array
        string current = "";
        for (int i = 0; i < servers.Count; i++)
        {
            ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/c QUERY SESSION " + name + " /SERVER:" + servers[i] + ".mydomain1.co.uk ")
            {
                WindowStyle = ProcessWindowStyle.Hidden,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                CreateNoWindow = true
            };

            Process getsess = Process.Start(startInfo);
            getsess.OutputDataReceived += (x, y) => current += y.Data;
            getsess.BeginOutputReadLine();
            getsess.WaitForExit();

            if (current.Contains(name))
            {
                // Session ID
                sessionDetails[0] = current.Substring(119, 4);
                // Server Name
                sessionDetails[1] = servers[i] + ".mydomain1.co.uk";

                break;
            }
        }
        return sessionDetails;

这很有用,似乎每次都会返回正确的会话详细信息,但它会在我的应用程序运行时间上增加大约10秒。

我已经研究过使用后台工作者类,但根据我所读到的内容,我不确定如何使用它实现这样的东西 - 有人可以告诉我这是否可能吗?

如果有人知道如何实现这一点,以便每个服务器查询与其他查询并行运行,我将非常感谢您能与我分享。

非常感谢

0 个答案:

没有答案