C# cmd同步显示问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# cmd同步显示问题相关的知识,希望对你有一定的参考价值。

用个FORM-richtextbox显示cmd窗口显示的内容,实现实时显示,使用 process.BeginOutputReadLine();来做的已经会了,但这样有个缺点,无法抓到最后的"C:\Users\Administrator>",原因是这一行没结束不符合ReadLine的条件吧?现在我想实时获取处理内容,同时最后又要显示“C:\Users\Administrator>_”这半行怎么办啊?(不要用process.WaitForExit();)。请不要在百度随便复制一个不显示最后一行的,或者等执行完才显示的代码过来,谢谢了

参考技术A process有个StandardOutput 的属性。streamReader类的。你可以调用的Read等方法,而不需要考虑换行。

C#多线程间的同步问题

使用线程时最头痛的就是共享资源的同步问题,处理不好会得到错误的结果,C#处理共享资源有以下几种:

1、lock锁

 

2、Mutex类

 

3、semaphore

 

其中lock 和mutex 差不多,都是锁定同一个资源,不同之处mutex在整个进程中都可以访问到。

semaphore是锁定多个资源,比如同一时期只能有两个线程访问,其它线程只能等待其中之一释放锁才能使用,Semaphore就是一个可以多次进入的“Mutex”。Mutex永远只允许一个线程拥有它,而Semaphore可以允许多个线程请求,因此Semaphore被用于管理一次可以允许多个线程进入并发访问资源的情况。

比如:

 class Program
    {
        static Semaphore sp = new Semaphore(2,2);
        static void Main(string[] args)
        {


            DoWork();
            Console.Read();
        }

        private static void DoWork()
        {
            for (int i = 0; i < 10; i++)
            {
                Task.Run(() => {
                    sp.WaitOne();
                    Console.WriteLine("线程:"+Thread.CurrentThread.ManagedThreadId+",开始运行");
                    Thread.Sleep(new Random().Next(1000));
                    Console.WriteLine("线程:" + Thread.CurrentThread.ManagedThreadId + ",结束此运行");
                    sp.Release();
                });
            }
        }
    }

 

以上是关于C# cmd同步显示问题的主要内容,如果未能解决你的问题,请参考以下文章

用C#编程,需要用CMD窗口显示结果,可CMD窗口闪一下就退出了,如何让CMD窗口一直显示不退出?

C#控制台应用程序中文显示问号 也不能复制粘贴

[C#] C#代码执行cmd命令

在 C# 中向 cmd 提示符发送命令

C#窗口切换问题:如何切换回主窗体

通过参数显示控制台窗口