C#中等待0.5秒,下面的命令代码
答案:3 悬赏:40
解决时间 2021-02-28 22:43
- 提问者网友:浪女天生ˇ性情薄
- 2021-02-28 15:19
C#中等待0.5秒,下面的命令代码
最佳答案
- 二级知识专家网友:兮沫♡晨曦
- 2021-02-28 16:20
using System.Threading;
Thread.Sleep(500);
Thread.Sleep(500);
全部回答
- 1楼网友:颜值超标
- 2021-02-28 18:31
您好,
首先,使用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()
{
initializecomponent();
}
private void form1_load(object sender, eventargs e)
{
this.label1.text = "";
this.label2.text = "status : ready";
}
private void button1_click(object sender, eventargs e)
{
if (openfiledialog1.showdialog()==dialogresult.ok)
{
if (savefiledialog1.showdialog()==dialogresult.ok)
{
fsrc = openfiledialog1.filename;
fdes = savefiledialog1.filename;
}
}
backgroundworker1.dowork += new doworkeventhandler(backgroundworker1_dowork);
backgroundworker1.runworkercompleted += new runworkercompletedeventhandler(backgroundworker1_runworkercompleted);
backgroundworker1.runworkerasync();
}
void backgroundworker1_runworkercompleted(object sender, runworkercompletedeventargs e)
{
this.label2.text = "status : completed";
}
void backgroundworker1_dowork(object sender, doworkeventargs e)
{
process p = new process();
p.startinfo.filename = "cmd.exe";
p.startinfo.useshellexecute = false;
p.startinfo.redirectstandardinput = true;
p.startinfo.redirectstandardoutput = true;
p.startinfo.createnowindow = true;
p.start();
string cmdstring = string.format("copy \"{0}\" \"{1}\"", fsrc, fdes);
p.standardinput.writeline(cmdstring);
p.standardinput.writeline("exit");
string s = p.standardoutput.readtoend();
p.close();
messagebox.show(s);
}
}
}
这种多线程的程序设计其实是比较难的,用worker是个偷懒的方法。
这样的好处是copy时ui不会失去响应,要付出的代价是copy时间可能加长。
其实,最高效的方法是iostream,把原文件分块,然后多线程同步download,最后进行拼接。但是这种多线程程序比较难以理解和维护,而且编写时也容易出错。
我非常乐意与您继续讨论这个问题~~
这几天堵车严重……先睡觉啦~
=====================
您好,
backgroundworker是“组件”不是“控件”,因此它在任何地方都可以使用。
如果您希望提高性能,我觉得用socket应该比较好,但socket比较低级,编码会比较困难。
- 2楼网友:邪性洒脱
- 2021-02-28 17:43
Thread.Sleep(500)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯