基本信息
源码名称:Environment示例源码
源码大小:0.03M
文件格式:.zip
开发语言:C#
更新时间:2014-04-14
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 3 元×
微信扫码支付:3 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
using System; using System.Diagnostics; using System.IO; using System.Threading; using System.Threading.Tasks; namespace FrameworkEnvironment { public static class EnvironmentMain { #region 事件 /// <summary>加载中 /// 加载中 /// </summary> public static event Action<string> Loading; private static void OnLoading(string obj) { Action<string> handler = Loading; if (handler != null) handler(obj); } /// <summary>结束加载 /// 结束加载 /// </summary> public static event Action<bool> EndLoad; private static void OnEndLoad(bool obj) { Action<bool> handler = EndLoad; if (handler != null) handler(obj); } /// <summary>显示加载面板 /// 显示加载面板 /// </summary> public static event Action ShowSplash; private static void OnShowSplash() { Action handler = ShowSplash; if (handler != null) handler(); } #endregion /// <summary>开始加载环境 /// 开始加载环境 /// </summary> /// <param name="sc"></param> public static void StartLoading(SynchronizationContext sc) { var task = new Task(() => { LoadingFrameWork(s => { if (string.IsNullOrEmpty(s)) return; sc.Post(ddd => OnLoading(s), null); }); sc.Post(dd => OnEndLoad(true), null); }); sc.Send(d => { task.Start(); OnShowSplash(); }, null); } /// <summary>加载运行环境 /// 加载运行环境 /// </summary> private static void LoadingFrameWork(Action<string> action) { const string args = "executequeueditems"; const string ngenName = "ngen.exe"; const string frameWork64 = @"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\"; const string frameWork32 = @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\"; string[] dos = { frameWork64, frameWork32 }; foreach (var @do in dos) { string dosStr = @do; var exists = Directory.Exists(dosStr); if (!exists) continue; dosStr = dosStr ngenName; ExecuteDos(dosStr, args, action); } } /// <summary>执行命令 /// 执行命令 /// </summary> private static void ExecuteDos(string exePath, string args, Action<string> action) { var process = new Process(); process.StartInfo.FileName = exePath; process.StartInfo.Arguments = args; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardInput = true; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.CreateNoWindow = true; process.Start(); process.OutputDataReceived = (ps, pe) => { if (action != null) { action(pe.Data); } }; process.BeginOutputReadLine(); process.WaitForExit(); } } }