C-sharp Form buggt
Hallo ihr Administratoren.
Ich habe ein kleines Problem. Unszwar möchte ich eine Ordner von C# zu einem PHP Script senden. Wenn ich nun auf den senden Button klicke, dann soll schonmal ein Fenster aufgehen, dass eine Verbindung zum Server hergestellt wird. Dann soll die Anfrage gesendet werden. Je nach Antwort, soll die Form etwas anderes darstellen. Soweit zur Theorie, aber wenn ich das ausführe, dann wird zwar der Ordner gesendet, die Form jedoch verbuggt (das GIF-Bild lädt nicht) und einzelne Elemente werden nicht dargestellt.
Ich dachte, mann kann diesen Vorgang asynchron machen, um den UI-Thread nicht zu belasten, dass funktioniert aber nicht. An der Stelle await t; bekomme ich diese Antwort vom .NET Framework:Control '' accessed from a theat other than the threat it was created on.
Hier der Quelltext:
Ich habe ein kleines Problem. Unszwar möchte ich eine Ordner von C# zu einem PHP Script senden. Wenn ich nun auf den senden Button klicke, dann soll schonmal ein Fenster aufgehen, dass eine Verbindung zum Server hergestellt wird. Dann soll die Anfrage gesendet werden. Je nach Antwort, soll die Form etwas anderes darstellen. Soweit zur Theorie, aber wenn ich das ausführe, dann wird zwar der Ordner gesendet, die Form jedoch verbuggt (das GIF-Bild lädt nicht) und einzelne Elemente werden nicht dargestellt.
Ich dachte, mann kann diesen Vorgang asynchron machen, um den UI-Thread nicht zu belasten, dass funktioniert aber nicht. An der Stelle await t; bekomme ich diese Antwort vom .NET Framework:Control '' accessed from a theat other than the threat it was created on.
Hier der Quelltext:
private async void Datensynchrisierung()
{
SynchronForm synchron = new SynchronForm();
try
{
if (NetworkID != 0 && HauptProjektpfad != "")
{
synchron.Show();
var t = Task.Run(() =>
{
DirectoryInfo d = new DirectoryInfo(HauptProjektpfad);
ZIP = Path.ChangeExtension(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), d.Name), ".zip");
Projekt_Speichern();
ZipFile.CreateFromDirectory(HauptProjektpfad, ZIP, CompressionLevel.Optimal, false);
var client = new RestClient("https://server.com/test/");
var request = new RestRequest("server.php", Method.POST);
request.AddFile("uploads", ZIP);
request.AddParameter("id", NetworkID);
IRestResponse response = client.Execute(request);
return response.Content;
});
await t;
if (t.ToString() == "success")
synchron.pictureBox1.Image =....;
synchron.label2.Text = "Das Projekt wurde erfolgreich gespeichert...";
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
File.Delete(ZIP);
synchron.Close();
}
}
Please also mark the comments that contributed to the solution of the article
Content-Key: 339983
Url: https://administrator.de/contentid/339983
Printed on: April 24, 2024 at 10:04 o'clock
2 Comments
Latest comment
Hi.
Hier buggt nichts , denn
Lese dich mal in Invoke und InvokeRequired ein.
https://stackoverflow.com/questions/661561/how-to-update-the-gui-from-an ...
https://msdn.microsoft.com/de-de/library/ms171728(v=vs.110).aspx
Gruß
Hier buggt nichts , denn
An der Stelle await t; bekomme ich diese Antwort vom .NET Framework:Control '' accessed from a theat other than the threat it was created on.
hier steht ja schon was du falsch machst, du willst aus dem asynchronen Thread auf Controls zugreifen welche nicht in dessen Thread-Kontext liegen. Hier liegt also ein IllegalCrossThreadCall vor.Lese dich mal in Invoke und InvokeRequired ein.
https://stackoverflow.com/questions/661561/how-to-update-the-gui-from-an ...
https://msdn.microsoft.com/de-de/library/ms171728(v=vs.110).aspx
Gruß