我想在按钮点击时调用我的c#代码中的计时器。它在表单加载事件中运行良好但在按钮点击时无效。请帮我修复它。谢谢提前。
我的代码在这里:
public partial class Form1 : Form
{
public int TimeTaken;
public Form1()
{
InitializeComponent();
lblFilesCount.Text = lblFoldersCount.Text = "0";
}
private void btnFolderBrowse_Click(object sender, EventArgs e)
{
DialogResult result = fbdFoldersFiles.ShowDialog();
if (result == DialogResult.OK)
{
string[] files = Directory.GetFiles(fbdFoldersFiles.SelectedPath);
MessageBox.Show("Files found: " + files.Length.ToString(), "Message");
}
txtFolderPath.Text = fbdFoldersFiles.SelectedPath;
}
private void btnDeleteFiles_Click(object sender, EventArgs e)
{
timerDelete.Enabled= true;
string path = fbdFoldersFiles.SelectedPath;
DirectoryInfo dirFirst = new DirectoryInfo(path);
foreach (FileInfo file in dirFirst.GetFiles())
{
timerDelete.Enabled = true;
DateTime dt = File.GetLastWriteTime(file.FullName);
if (dt < dtpDate.Value)
{
DeleteFiles(file);
}
}
string[] dirArray = Directory.GetDirectories(path, "*", SearchOption.AllDirectories).ToArray();
Array.Reverse(dirArray);
foreach (var directory in dirArray)
{
if (Directory.GetFiles(directory).Length > 0 || Directory.GetDirectories(directory).Length>0)
{
DirectoryInfo dir = new DirectoryInfo(directory);
FileInfo[] files = dir.GetFiles().ToArray();
foreach (FileInfo file in files)
{
timerDelete.Enabled = true;
DateTime dt = File.GetLastWriteTime(file.FullName);
if (dt < dtpDate.Value)
{
DeleteFiles(file);
}
}
if (Directory.GetFiles(directory).Length == 0 )
{
dir.Delete(true);
lblFoldersCount.Text = (Convert.ToInt32(lblFoldersCount.Text) + 1).ToString();
}
}
}
timerDelete.Enabled = false;
}
protected void DeleteFiles(FileInfo DeleteFile)
{
dgvDisplayFilesInfo.Rows.Add();
int RowIndex = dgvDisplayFilesInfo.RowCount - 1;
DataGridViewRow r = dgvDisplayFilesInfo.Rows[RowIndex];
r.Cells["dgvColoumnSrNo"].Value = RowIndex+1;
r.Cells["dgvColumnFullName"].Value = DeleteFile.Name;
r.Cells["dgvColumnPath"].Value = DeleteFile.Directory;
DeleteFile.Delete();
lblFilesCount.Text = (Convert.ToInt32(lblFilesCount.Text)+1).ToString();
}
private void timerDelete_Tick(object sender, EventArgs e)
{
TimeTaken = TimeTaken++;
lblShowTimeTaken.Text = TimeTaken.ToString();
}
}
答案 0 :(得分:0)
首先,您要在foreach
中设置Enabled = True,我认为这不是您的意图。第二,为什么不使用秒表组件。它更容易使用。
Stopwatch sw = new Stopwatch();
sw.Start();
....
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds.ToString())