三、测试使用
程序测试运行界面,
界面部分代码大多数由设计器生成,下面列出了主要添加代码,
//委托,更新文本框
private delegate void AppendTextHandler(string content);
//标记转换操作是否完成
private int convertOK =0;
private System.Windows.Forms.TextBox textBoxFolder;//路径文本框
private System.Windows.Forms.Button buttonFolder;//浏览按钮
private System.Windows.Forms.TextBox textBoxInfo;//信息显示框
private System.Windows.Forms.Button buttonOK;//运行按钮
private System.Windows.Forms.Button buttonCancel;//退出按钮
按钮处理函数用来打开一个路径选择框,
private void buttonFolder_Click(object sender, System.EventArgs e)
{
FolderBrowserDialog myDialog = new FolderBrowserDialog();
myDialog.ShowNewFolderButton = false;
myDialog.Description = "选择需要处理的解决方案或项目目录";
if(myDialog.ShowDialog()==DialogResult.OK)
this.textBoxFolder.Text = myDialog.SelectedPath;
myDialog.Dispose();
}
运行函数,在这里面实例化VssConverter类,并调用了RemoveVss方法,运行时把几个按钮禁了,里面注册了两个事件,起信息传递作用,不过对于直接在地址栏中输入非法路径没有做具体判断,
private void buttonOK_Click(object sender, System.EventArgs e)
{
if(this.textBoxFolder.Text.Length>1)
{
this.textBoxInfo.Clear();
this.convertOK = 0;
this.buttonOK.Enabled = false;
this.buttonFolder.Enabled = false;
this.buttonCancel.Enabled = false;
this.textBoxFolder.Enabled = false;
VssConverter vssConverter = new VssConverter(this.textBoxFolder.Text);
vssConverter.OperateNotify += new OperateNotifyHandler(vssConverter_OperateNotify);
vssConverter.ThreadCompleted += new EventHandler(vssConverter_ThreadCompleted);
vssConverter.RemoveVss();
}
else
MessageBox.Show("请输入解决方案或项目路径!");
}
下面是两个事件处理函数,第一个是用来在前台即时显示当前处理的文件信息,第二个函数是用来通知线程的执行结果。函数如下,
// 信息通知
private void vssConverter_OperateNotify(object sender, VssEventArgs e)
{
AppendTextHandler ath = new AppendTextHandler(this.textBoxInfo.AppendText);
this.textBoxInfo.BeginInvoke(ath,new object[]{e.Message+Environment.NewLine});
}
// 线程结束通知
private void vssConverter_ThreadCompleted(object sender, EventArgs e)
{
if(this.convertOK==0)
this.convertOK++;
else
{
this.buttonOK.Enabled = true;
this.buttonFolder.Enabled = true;
this.buttonCancel.Enabled = true;
this.textBoxFolder.Enabled = true;
this.textBoxInfo.AppendText("#### 转换完成 ####");
}
}
总结,程序通过搜索指定目录下的文件,根据扩展名进行相应的操作来完成处理,其中为了加快运行速度增加了线程来处理。