2012-07-01 5 views
0

Ok, так что я следующий код:Создание потока в C#

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, im new.

+1

Пожалуйста, пост только соответствующие части вашего вопроса. Весь код формы не требуется. – Yuck

ответ

5

backgroundWorker1местный переменная.
Это не существует за пределами CopyButton_Click.

Вы можете либо поместить его в поле класса, либо отличить его от параметра sender.

+0

эй, спасибо за помощь, так как я сказал им, что это действительно ново для этого, около 3 недель, чтобы быть точным, что является лучшим методом, и могли бы вы показать мне, как, или дать мне ссылку на какую-то помощь? –

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; 

    } 
    } 
} 
+0

вещь, если я принимаю отчет о проделанной работе, он работает –

+0

Да, материал прогресса отчета пытается получить доступ к переменной backgroundWorker1, но он не существует в области этого метода. Решение burn_LEGION будет работать, потому что оно изменяет переменную backgroundWorker для охвата всего класса. –

Смежные вопросы