Ich bin in meiner Windows Form-Anwendung Logik von einer Klasse zu einer anderen zu trennen. Wenn alles in einer Klasse funktioniert, funktioniert es gut, aber ich verlagere die Logik jetzt auf die eigenen Klassen. Probleme mit dem backgroundWorker aus einer anderen Klasse haben.Zugriff auf Hintergrundarbeitskraft aus einer anderen Klasse
ich in Klasse A
public partial class ClassA : Form
BackgroundWorker essentialBgWorker = new BackgroundWorker();
public ClassA()
{
InitializeComponent();
//essentialBgWorker
essentialBgWorker.DoWork += new DoWorkEventHandler(essentialBgWorker_DoWork);
essentialBgWorker.ProgressChanged += new ProgressChangedEventHandler(essentialBgWorker_ProgressChanged);
essentialBgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(essentialBgWorker_RunWorkerCompleted);
essentialBgWorker.WorkerReportsProgress = true;
}
Das ist eine Form, die eine Taste aufweist, die bei Anklicken kopiert Dateien in ein anderes Verzeichnis. Diese
private void copyButton_Click(object sender, EventArgs e)
{
clickedButton = ((Button)sender).Name.ToString();
itemsChanged = ((Button)sender).Text.ToString();
essentialBgWorker.RunWorkerAsync();
}
läuft die Hintergrundarbeiter:
public void essentialBgWorker_DoWork(object sender, DoWorkEventArgs e)
{
string buttonSender = clickedButton; //copyButton, deleteButton, etc.
switch (buttonSender)
{
case "copyButton":
//this is pseudocode - the important part being that this is where I would call the method from the other class
ClassB.copyDocuments();
break;
case "deleteButton":
//this is pseudocode - the important part being that this is where I would call the method from the other class
ClassB.deleteDocuments();
break;
default:
essentialBgWorker.CancelAsync();
break;
}
}
In meiner anderen Klasse (ClassB
) für dieses Beispiel habe ich die Methode, die aufgerufen wird, wenn die Schaltfläche geklickt wird (sollte die Logik sein Handling).
public void copyDocuments()
{
ClassA classA = new ClassA();
//
//the logic that handles copying the files
//gets the filecount!
//Report to the background worker
int totalFileCount = fileCount;
int total = totalFileCount; //total things being transferred
for (int i = 0; i <= total; i++) //report those numbers
{
System.Threading.Thread.Sleep(100);
int percents = (i * 100)/total;
classA.essentialBgWorker.ReportProgress(percents, i);
//2 arguments:
//1. procenteges (from 0 t0 100) - i do a calcumation
//2. some current value!
}
//Do the copying here
}
Ich halte ein Problem mit dieser Linie mit:
classA.essentialBgWorker.ReportProgress(percents, i);
Diese Linie gearbeitet, als es in KlasseA war - aber sobald es in ClassB bringen gibt einen Fehler:
ClassA.essentialBgWorker' is inaccessible due to it's protection level
Nur auf der Suche nach etwas Hilfe auf dem richtigen Weg zu bekommen es von der anderen Klasse zu feuern.
Ist "essentialBgWorker" eine Öffentlichkeit? Und wenn ja, stellen Sie sicher, dass es nicht statisch ist. – Trey
Können Sie die Deklaration von essentialBgWorker in KlasseA hinzufügen? –
Aktualisiert den Code mit der Erklärung des Arbeitnehmers in ClassA – Hanny