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();
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 339983
Url: https://administrator.de/contentid/339983
Ausgedruckt am: 25.11.2024 um 05:11 Uhr
2 Kommentare
Neuester Kommentar
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ß