/// <summary> /// 创建并运行一个线程 /// </summary> /// <param name="executeCode">线程要执行的方法</param> /// <returns></returns> public static Thread RunThread(SimpleDelegateCode executeCode) { //创建线程运行的方法 ThreadStart threadStart = new ThreadStart(delegate() { try { //如果要执行的方法不为空,就执行该方法 executeCode?.Invoke(); } catch (Exception ex) { //如果发生异常就记录异常信息 LogUtil.WriteLog(ex); } }); //创建一个新线程 Thread executeThread = new Thread(threadStart); //设置为后台运行 executeThread.IsBackground = true; //启动线程 executeThread.Start(); return(executeThread); }
/// <summary> /// 从要执行的方法列表中移除待执行的方法 /// </summary> /// <param name="executeCode">待执行的方法</param> public void Remove(SimpleDelegateCode executeCode) { //锁住要执行的方法列表,防止在从要执行的方法列表中移除待执行的方法时有新元素插入或移除,导致执行顺序错误 lock (executeCodes) { executeCodes.Remove(executeCode); } }
/// <summary> /// 向要执行的方法列表中插入方法,并放到指定位置 /// </summary> /// <param name="codeIndex">方法要放至的元素位置</param> /// <param name="executeCode">待执行的方法</param> public void Insert(int codeIndex, SimpleDelegateCode executeCode) { //锁住要执行的方法列表,防止在向要执行的方法列表中插入方法,并放到指定位置时有新元素插入或移除,导致执行顺序错误 lock (executeCodes) { executeCodes.Insert(codeIndex, executeCode); } }
/// <summary> /// 向要执行的方法列表中增加方法 /// </summary> /// <param name="executeCode">待执行的方法</param> public void Add(SimpleDelegateCode executeCode) { //锁住要执行的方法列表,防止在向要执行的方法列表中增加方法时有新元素插入或移除,导致执行顺序错误 lock (executeCodes) { //添加方法到要执行的方法列表 executeCodes.Add(executeCode); } }
/// <summary> /// 执行要执行的方法列表中的第一个方法 /// </summary> public void ExecuteNext() { //如果要执行的方法列表中没用元素,就直接返回 if (executeCodes.Count == 0) { return; } //锁住要执行的方法列表,防止在取出列表中第一个元素时有新元素插入或移除,导致执行顺序错误 lock (executeCodes) { //取出列表中第一个元素 SimpleDelegateCode executeCode = executeCodes.FirstOrDefault(); //将他从列表中移除,此步骤相当于队列的出队 executeCodes.Remove(executeCode); //如果取出的元素不为空,就执行该方法 executeCode?.Invoke(); } }
/// <summary> /// 展示打开文件对话框 /// </summary> /// <param name="rootPath">对话框初始路径</param> /// <param name="extensionFilter">要打开的文件后缀的限制 /// <para>例如:</para> /// <para>所有文件(*.*)|*.*</para> /// </param> /// <param name="canMulti">是否允许多选</param> /// <param name="onOpen">在打开时要执行的委托方法</param> /// <returns></returns> public static string[] ShowOpenFileDialog(string rootPath, string extensionFilter, bool canMulti, SimpleDelegateCode onOpen) { //初始化返回值 List <string> results = new List <string>(); //调用Win32的打开文件对话框 OpenFileDialog fileDialog = new OpenFileDialog(); //如果初始路径为空,就设置为应用程序根目录,否则会被定位到C盘 if (string.IsNullOrEmpty(rootPath)) { rootPath = ApplicationPath; } //设置初始路径 fileDialog.InitialDirectory = rootPath; //定义默认的文件后缀 string defaultFilter = "所有文件(*.*)|*.*"; //设置文件后缀和默认的文件后缀 fileDialog.Filter = string.IsNullOrEmpty(extensionFilter) ? defaultFilter : extensionFilter; //设置是否允许选择多个文件 fileDialog.Multiselect = canMulti; //打开 打开文件对话框 bool?dialogResult = fileDialog.ShowDialog(); //如果对话框点的是确定、OK、是,则获取保存的文件的名字,并执行委托方法 if (dialogResult.HasValue && dialogResult.Value) { results.AddRange(fileDialog.FileNames); onOpen?.Invoke(); } return(results.ToArray()); }
/// <summary> /// 展示打开文件对话框 /// </summary> /// <param name="rootPath">对话框初始路径</param> /// <param name="extensionFilter">要打开的文件后缀的限制 /// <para>例如:</para> /// <para>所有文件(*.*)|*.*</para> /// </param> /// <param name="onOpen">在打开时要执行的委托方法</param> /// <returns></returns> public static string ShowOpenFileDialog(string rootPath, string extensionFilter, SimpleDelegateCode onOpen) { return(ShowOpenFileDialog(rootPath, extensionFilter, false, onOpen).FirstOrDefault()); }
/// <summary> /// 展示保存文件对话框 /// </summary> /// <param name="fileName">要保存的文件名</param> /// <param name="extensionFilter">要保存的文件的后缀 /// <para>例如:</para> /// <para>所有文件(*.*)|*.*</para> /// </param> /// <param name="defaultExtension">默认文件后缀</param> /// <param name="onSave">在保存时要执行的委托方法</param> /// <returns></returns> public static string ShowSaveFileDialog(string fileName, string extensionFilter, string defaultExtension, SimpleDelegateCode onSave) { //初始化返回值 string result = string.Empty; //调用Win32的保存文件对话框 SaveFileDialog fileDialog = new SaveFileDialog(); //设置默认显示的名字 fileDialog.FileName = fileName; //定义默认的文件后缀 string defaultFilter = "所有文件(*.*)|*.*"; //设置文件后缀和默认的文件后缀 fileDialog.Filter = string.IsNullOrEmpty(extensionFilter) ? defaultFilter : extensionFilter; fileDialog.DefaultExt = string.IsNullOrEmpty(defaultExtension) ? defaultFilter : defaultExtension; //打开保存文件对话框 bool?dialogResult = fileDialog.ShowDialog(); //如果对话框点的是确定、OK、是,则获取保存的文件的名字,并执行委托方法 if (dialogResult.HasValue && dialogResult.Value) { result = fileDialog.FileName; onSave?.Invoke(); } return(result); }
/// <summary> /// 向要执行的方法列表中插入方法,并放到第一位 /// </summary> /// <param name="executeCode">待执行的方法</param> public void Shift(SimpleDelegateCode executeCode) { Insert(0, executeCode); }