我想在按钮点击时在我的c#代码中调用计时器。它在表单加载事件中运行良好但在单击按钮时没有工作

时间:2014-04-01 05:40:18

标签: c# winforms

我想在按钮点击时调用我的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();
    }
}

1 个答案:

答案 0 :(得分:0)

首先,您要在foreach中设置Enabled = True,我认为这不是您的意图。第二,为什么不使用秒表组件。它更容易使用。

Stopwatch sw = new Stopwatch();
sw.Start();
....
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds.ToString())