最近……特別忙啊……想總結(jié)些東西都沒時間,剛好做了個編輯器需要對接批處理CMD命令,順帶記下來點簡單的東西。
用途:執(zhí)行外部的批處理命令
例如:
a.在U3D的編輯器類中操作CMD腳本,自動生成Protobuf文件。
b.資源的自動導(dǎo)入導(dǎo)出
c.調(diào)用外部程序顯示,打開外部程序
……
反正挺有用,看你用不用而已。
1.首先要調(diào)用命令行,需要用到Process類。
using System.Diagnostics;
2.引用了這個類后,需要一個封裝好的執(zhí)行函數(shù)。我直接從網(wǎng)上找的一段,作者不詳。
private string RunCmd(string command)
{
//例Process
Process p = new Process();
p.StartInfo.FileName = "cmd.exe"; //確定程序名
p.StartInfo.Arguments = "/c " + command; //確定程式命令行
p.StartInfo.UseShellExecute = false; //Shell的使用
p.StartInfo.RedirectStandardInput = true; //重定向輸入
p.StartInfo.RedirectStandardOutput = true; //重定向輸出
p.StartInfo.RedirectStandardError = true; //重定向輸出錯誤
p.StartInfo.CreateNoWindow = true; //設(shè)置置不顯示示窗口
p.Start();
return p.StandardOutput.ReadToEnd(); //輸出出流取得命令行結(jié)果果
}
3.你會發(fā)現(xiàn)哎喲,可以用哦,好屌的感覺。
4.你又發(fā)現(xiàn)主程序被鎖死(阻塞)了,因為它占用了U3D主循環(huán)線程
例如:在Start()或者別的地方調(diào)用一下會造成程序卡死的現(xiàn)象出現(xiàn)。
5.這個時候你需要開一個新線程來執(zhí)行這些東西,這時候你要將執(zhí)行函數(shù)變?yōu)殪o態(tài)函數(shù)了。具體的大家自己修吧,我隨便貼個指引代碼而已。
using System.Threading;
public static string global_cmd = "";
void Start () {
Thread newThread = new Thread(new ThreadStart(NewThread));
newThread.Start();
}
static void NewThread()
{
RunCmd(global_cmd);
}
6.有問題就留言唄。