zoukankan      html  css  js  c++  java
  • 调用控制台程序的方法以及注意事项

    我们常常用遇到调用第三方库,但是该库文件没有做好内存管理,会发生内存泄露的情况。

    这个时候我们可以在控制台中调用该库,然后在代码中调用控制台程序,以此控制台的来管理内存。

    public class ConsoleMethod
        {
            private static int _time = 10 * 60 * 1000;
            public static string InvokeConsole(string parameter, string programName, string programAddress = null)
            {
                Process cmd = new Process();
                cmd.StartInfo.FileName =programAddress+"\"+programName;
    
                if (!string.IsNullOrEmpty(programAddress))
                {
                    cmd.StartInfo.WorkingDirectory = programAddress;
                }
    
                //将cmd的标准输入和输出全部重定向到.NET的程序里
                cmd.StartInfo.UseShellExecute = false; //此处必须为false否则引发异常
                //cmd.StartInfo.RedirectStandardInput = true; //标准输入
                cmd.StartInfo.RedirectStandardOutput = true; //标准输出
                cmd.StartInfo.Arguments = parameter; //参数以空格分隔,如果某个参数为空,可以传入””
    
                //不显示命令行窗口界面
                cmd.StartInfo.CreateNoWindow = true;
                cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                cmd.Start(); //启动进程
    
                //获取输出
                //需要说明的:此处是指明开始获取,要获取的内容,
                //只有等进程退出后才能真正拿到
                StreamReader streamR = cmd.StandardOutput;
                string result = string.Empty;
                Task.Run(() =>  // 采用异步,读取调用控制台输出结果
                {
                    result = cmd.StandardOutput.ReadToEnd();
                });
                bool res = cmd.WaitForExit(_time);//等待控制台程序执行完成
                if (!res)
                {
                    cmd.Kill();
                    cmd.Dispose();
                    return result;
                }
                cmd.Close();//关闭该进程
                cmd.Dispose();//关闭该进程
                return result;
            }
        }

      


    控制台应用,有两个地方需要注意:
    1.为防止 调用程序 crash 造成线程死锁,需要关闭 werfalut。 如何禁用 werfault
    2.为防止输出过大,造成死锁,需要采用异步



  • 相关阅读:
    WEP编码格式
    OSK VFS read数据流分析
    科学剖析濒死体验 "复生"者讲述"死"前1秒钟
    Android的开发相对于tizen的开发难度
    minix文件系统分析
    贴给小程序(1) 查找第一个0值
    Linux下的QQ
    OSK USB 驱动
    LRU算法之hash+list实现(转)
    插入排序
  • 原文地址:https://www.cnblogs.com/yaolin1228/p/9063193.html
Copyright © 2011-2022 走看看