参考个人文章:https://blog.csdn.net/sinat_37519884/article/details/80495828
版本
VS2015
Revit2018
实现功能
可视化当前程序执行进度,并在完成后自动关闭
Program.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.UI; namespace FormTest { [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class Program : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { int size = 7; string progressMsg = "正在执行第 {0}/{1} 剪切对..."; string progressFormText = "自动剪切"; Worker a = new Worker(progressFormText, progressMsg, size); a.Show(); return Result.Succeeded; } } }
Winform
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Threading; namespace FormTest { public partial class Worker : Form { private string fT = null; private string pMsg = null; private int Maximum = 0; public Worker(string formText, string progressMsg, int progressMaximum) { InitializeComponent(); fT = formText; pMsg = progressMsg; Maximum = progressMaximum; //放在此处直接自动启动程序 Text = fT;//修改窗体Title Thread fThread = new Thread(new ThreadStart(SleepT)); fThread.Start(); } private delegate void SetPos(int ipos, string vinfo); //代理 //public Worker() //{ // InitializeComponent(); //} //控制button //private void button1_Click_1(object sender, EventArgs e) //{ // Thread fThread = new Thread(new ThreadStart(SleepT)); // fThread.Start(); //} //控制textbox private void SleepT() { for (int i = 0; i <= Maximum; i++) //记得加等号,不然ProgressBar无法到100% 【修改】 Maximum { System.Threading.Thread.Sleep(1000); SetTextMesssage(i, i.ToString() + "\r\n"); //此处全用i【修改】 } } //控制progressBar private void SetTextMesssage(int ipos, string vinfo) { if (this.InvokeRequired) { SetPos setpos = new SetPos(SetTextMesssage); this.Invoke(setpos, new object[] {ipos, vinfo}); } else { string a = ipos.ToString(); string b = Maximum.ToString(); //this.label1.Text = $"正在执行第 {a}/{b} 剪切对..."; this.label1.Text = string.Format(pMsg, a, b); //this.label1.Text = ipos.ToString() + "/"+Maximum; //只是字符串显示:"/"+Maximum【修改】 progressBar1.Maximum = Maximum; //修改progressBar1.Maximum 【修改】 this.progressBar1.Value = Convert.ToInt32(ipos); this.textBox1.AppendText(vinfo); if (progressBar1.Value == progressBar1.Maximum) { this.Close(); } } } //中途关闭会报错。。。当前无法解决 private void Worker_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; // 取消关闭操作 } } }