Ich habe mein Programm in 3 Schichten aufgeteilt; GUI, BL, IO und versuchte, Dateien von meinem Server zu meinem PC zu grapieren. Ich habe es multi-threaded gemacht und zorks gut, aber als ich versuchte, einen Delegaten hinzuzufügen, um Nachrichten von meinem IO zu meiner GUI zu senden, stört es mich. Es wird gesagt, etwas wie:invalidOperationException bei der Verwendung von Delegaten im Thread
Es ist keine Operation durch verschiedene Threads auszuführen erlaubt: es ist von einem anderen Thread Zugriff auf die Herunterladesteuer Etikett hatte Fortschritt als das Gewinde, auf das das Element angelegt wird.
Was ich habe, ist dies:
GUI
private void buttonDownload_Click(object sender, EventArgs e)
{
download = new BL_DataTransfer(Wat.FILM, titel, this.downloadDel);
t = new Thread(new ThreadStart(download.DownLoadFiles));
t.Start();
}
private void UpdateDownloadLabel(string File)
{
labelDownloadProgress.Text = "Downloading: " + File;
}
BL
public void DownLoadFiles()
{
//bestanden zoeken op server
string map = BASEDIR + this.wat.ToString() + @"\" + this.titel + @"\";
string[] files = IO_DataTransfer.GrapFiles(map);
//pad omvormen
string[] downloadFiles = this.VeranderNaarDownLoadPad(files,this.titel);
IO_DataTransfer.DownloadFiles(@".\" + this.titel + @"\", files, downloadFiles, this.obserdelegate);
}
IO
public static void DownloadFiles(string map, string[] bestanden, string[] uploadPlaats, ObserverDelegate observerDelegete)
{
try
{
Directory.CreateDirectory(map);
for (int i = 0; i < bestanden.Count(); i++)
{
observerDelegete(bestanden[i]);
File.Copy(bestanden[i], uploadPlaats[i]);
}
}
catch (UnauthorizedAccessException uoe) { }
catch (FileNotFoundException fnfe) { }
catch (Exception e) { }
}
Delgate
public delegate void ObserverDelegate(string fileName);
ooh nett! Danke, funktioniert –