C#如何等待CMD命令结束

来源:百度知道 编辑:UC知道 时间:2024/06/01 21:07:26
我在写一个程序,一个新的进程关联CMD,运行一个COPY命令把远程计算机的一个文件COPY到本机,代码如下

Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
string Cmdstring = "xcopy XXX XXX"; //CMD命令
p.StandardInput.WriteLine(Cmdstring);

p.StandardInput.WriteLine("exit");

但问题是,如果文件太大的话,就会COPY一段时间,文件才会过来,那段拷贝的时间这样挂起程序啊,或者说怎么才能检测得到文件拷贝完啊,我还想做个进度条这样的,希望知道的帮下忙,谢谢了,满意答案追加100分。
晕~我详细补充的问题不见了,目的是这样的有ABC三台电脑,A和B是一个局域网,B和C是一个局域网,A不能访问C,C是一个文件存放的服务器,B是一个WEB服务,里面我写了个上传、下载、管理C文件目录分类等等的方法,A把要下载的文件参数传到B,B通过查询等到URL去C拿文件,把C的文件复制到B的一个临时文件夹中,然后进行流分块,通过流把文件传到A里。开始我是通过流的方法传送的,但后来在实际中C的消耗

您好,

首先,使用CMD拷贝是不可能写进度条的,或者说,进度条无法反映真实拷贝时间。

然后就是失去响应的问题,

我的建议是您对Process.Start()方法进行一个简单的封装,然后使用一个BackgroundWorker或Thread,在UI线程以外另建立一个线程,这样可以保证用户界面不会失去响应,如果使用Worker,您可以在RunWorkerCompleted()事件中进行拷贝完成的处理。

如果使用File.Copy(),您同样需要对建立File对象的方法另开一个线程,否则仍然会出现失去响应的问题。

另外,试图从远程计算机拷贝文件可能会有一些身份验证(多半是NTML)方面的问题。

如果您需要代码,请补充问题。

======================================

您好,

很抱歉这么晚给您回复……

下面这个代码是BackgroundWorker的一个简单使用,您参考一下先

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace WindowsApplicationNetCopyWithCMD
{
public partial class Form1 : Form
{
string fsrc = "";
string fdes = "";

public Form1()