0

さて、私は次のコードを持っています:

public partial class Form1 : Form
{
    private void FileWatcher_Created(object sender, System.IO.FileSystemEventArgs e)
    {
        ListViewItem newFile = new ListViewItem(new string[] { e.FullPath.ToString(), e.ChangeType.ToString() }, -1);
        newFile.Tag = e.FullPath.ToString();
        FileList.Items.Add(newFile);
    }

    private void CopyButton_Click(object sender, EventArgs e)
    {
        BackgroundWorker backgroundWorker1 = new BackgroundWorker();
        backgroundWorker1.WorkerReportsProgress = true;
        backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
        backgroundWorker1.ProgressChanged +=
          new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
        backgroundWorker1.RunWorkerAsync();
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        int TotalFiles = FileList.CheckedItems.Count;;
        int CurrentFile = 1;
        foreach (ListViewItem CheckedFile in FileList.CheckedItems)
        {
            backgroundWorker1.ReportProgress((CurrentFile / TotalFiles) * 100);
            string FileBuilder = Settings.Default.Destination + Path.GetFileName(CheckedFile.Tag.ToString());
            if (File.Exists(FileBuilder) == false)
            {
                File.Copy(CheckedFile.Tag.ToString(), FileBuilder);
            }
            CurrentFile++;
        }
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        CopyProgressBar.Value = e.ProgressPercentage;
    }
}

DoWorkイベントのレポート進行状況メソッドが現在のコンテキストに存在しないと私に言い続けています、誰かが理由を知っていますか?これがnoobエラーである場合は、ご容赦ください。

4

2 に答える 2

5

backgroundWorker1ローカル変数です。
の外には存在しませんCopyButton_Click

クラスフィールドに配置するか、senderパラメータからキャストすることができます。

于 2012-07-01T14:55:21.607 に答える
2
private void CopyButton_Click(object sender, EventArgs e)
    {
        BackgroundWorker backgroundWorker1 = new BackgroundWorker();
        backgroundWorker1.WorkerReportsProgress = true;
        backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
        backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
        backgroundWorker1.RunWorkerAsync();
    }

あなたは BackgroundWorker が開始メソッドで初期化され、終了時に破棄されます

クラスで BackgroundWorker を宣言してみてください

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using FileWatchDog.Properties;
using System.Text.RegularExpressions;

namespace FileWatchDog
{
public partial class Form1 : Form
{
    BackgroundWorker backgroundWorker1;
    public Form1()
    {
        InitializeComponent();

    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void FileWatcher_Created(object sender, System.IO.FileSystemEventArgs e)
    {
        ListViewItem newFile = new ListViewItem(new string[] { e.FullPath.ToString(), e.ChangeType.ToString() }, -1);
        newFile.Tag = e.FullPath.ToString();
        FileList.Items.Add(newFile);
    }

    private void CopyButton_Click(object sender, EventArgs e)
    {
        backgroundWorker1 = new BackgroundWorker();
        backgroundWorker1.WorkerReportsProgress = true;
        backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
        backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
        backgroundWorker1.RunWorkerAsync();
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        int TotalFiles = FileList.CheckedItems.Count;;
        int CurrentFile = 1;
        foreach (ListViewItem CheckedFile in FileList.CheckedItems)
        {
            backgroundWorker1.ReportProgress((CurrentFile / TotalFiles) * 100);
            string FileBuilder = Settings.Default.Destination + Path.GetFileName(CheckedFile.Tag.ToString());
            if (File.Exists(FileBuilder) == false)
            {
                File.Copy(CheckedFile.Tag.ToString(), FileBuilder);
            }
            CurrentFile++;
        }
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        CopyProgressBar.Value = e.ProgressPercentage;

    }
  }
}
于 2012-07-01T14:58:11.220 に答える