c#执行bat批处理文件,并通过线程将结果显示在控件中

核心代码如下:

Process p = new Process();
p.StartInfo.FileName = filePath;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
string txt = p.StandardOutput.ReadToEnd();
this.textBox1.Invoke(new EventHandler(delegate
{
this.textBox1.Text +="\r\n"+ txt;
}));
p.WaitForExit();
p.Close();
p.Dispose();

this.textBox1.Invoke(new EventHandler(delegate
{
this.textBox1.Text += "\r\n\r\n文件(" + filePath + ")执行结束";
}));

因为批处理文件时在线程里处理的,所以处理控件的时候需要invoke执行

时间: 2024-12-16 05:22:17

c#执行bat批处理文件,并通过线程将结果显示在控件中的相关文章

Windows Server 2008中使用计划任务定时执行BAT批处理文件图文教程

这篇文章主要介绍了Windows Server 2008中使用计划任务定时执行BAT批处理文件,这样就可以定时执行自己的任务了. 首先Windows Server 2008不同于其他服务器操作系统和Windows Server 2003有着很大的区别,计划任务的名称是"任务计划程序"不在控制面板里,而是在"管理工具"里. 由于服务器需要做些任务,定时执行,自己写程序吧,麻烦,所以采用BAT进行代替操作,网络上很多人都在说每分钟执行怎么配置,今天我们就配置一下. 打开

跨线程用invoke调用ui控件方法小结

同步方法,控件.invoke(delegate,参数),前面这个delegate要声明而且要实现,为什么要实现呢?因为控件不知道怎么实现.你得把解决方案通过委托给控件,控件才能照做. 相当于send了一个invoke message给控件, "Hi,A控件,我是其它线程来的,想委托你做点事情,具体怎么做我写在委托的信封里头了", 控件拆开信封,按照信封里头的内容处理. 异步方法,就是BeginInvoke,Endinvoke,更加灵活,可以在控件做完了还能回调一些函数,让调用线程做些通

winform WebBrowser控件中,cs后台代码执行动态生成的js

很多文章都是好介绍C# 后台cs和js如何交互,cs调用js方法(js方法必须是页面上存在的,已经定义好的),js调用cs方法, 但如果想用cs里面执行动态生成的js代码,如何实现呢? 思路大致是这样的,cs动态插入js到html上,cs执行html插入的js方法代码. 封装好的方法: /// <summary> /// webbrowser执行脚本 /// </summary> /// <param name="web">传入WebBrowser 

java 执行bat批处理文件 并关闭cmd窗口

import java.io.IOException; public class CmdMain { public static void main(String[] args){ //执行批处理文件 String strcmd="cmd /c start D:\\antrelease.bat"; Runtime rt = Runtime.getRuntime(); Process ps = null; try { ps = rt.exec(strcmd); } catch (IOEx

Java执行bat批处理文件,并关闭cmd窗口

package com.baobaotao.test; import java.io.IOException; public class CmdMain { public static void main(String[] args) { // 执行批处理文件 String strcmd = "cmd /c start E:\\run.bat"; Runtime rt = Runtime.getRuntime(); Process ps = null; try { ps = rt.ex

Windows Server 2012和2008中使用计划任务定时执行BAT批处理文件 定时备份mysql数据

MySQL 安装位置:D:\Program Files\MySQL\MySQL Server 5.0\data 如图: 数据库名称为:952game数据库备份目的地:d:\db_bak\ (你想把数据库备份到哪个盘的路径)我想备到D盘的db-bak目录下面============================新建db_bak.bat,写入以下代码 我的数据库地址 我备份的文件地址:  我的db-bak.dat 文件 net stop mysqlxcopy "E:\Server\mysql\My

C#中线程对控件的访问

Control类提供了一个Invoke方法来给子线程访问主线程的控件,它的原型是酱紫的: object.Control.Invoke(Delegate method); object.Control.Invoke(Delegate method,params object[] args); method是已创建的委托对象,如果该对象的关联方法有参数,那就放在数组args中,没有就不用传 Invoke食用方法如下(假设我访问控件的方法是getForms()): public delegate vo

网络操作不能直接写在主线程中 以及 为什么不能在子线程中更新UI控件的属性

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //注意: 所有网络操作不能直接写在主线程中 因为所有的网络操作都是耗时的,如果加载到主线程中,会导致与用户的交互出现问题 ,所以要加载到子线程中 // [self loadImage]; [self performSelectorInBackground:@selector(loadImage) withObject:nil]; } //加

在C#中子线程如何操作主窗口线程上的控件

在C#中子线程怎样操作主线程中窗口上控件 在C#中,直接在子线程中对窗口上的控件操作是会出现异常,这是因为子线程和运行窗口的线程是不同的空间,因此想要在子线程来操作窗口上的控件.是不可能简单的通过控件对象名来操作,但不是说不能进行操作,微软提供了Invoke的方法.其作用就是让子线程告诉窗口线程来完毕对应的控件操作. 要实现该功能,基本思路例如以下: 把想对还有一线程中的控件实施的操作放到一个函数中,然后使用delegate代理那个函数.而且在那个函数中加入一个推断,用 InvokeRequir