yanmai
Goto Top

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:
 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();
            }
        }

Content-ID: 339983

Url: https://administrator.de/contentid/339983

Ausgedruckt am: 25.11.2024 um 05:11 Uhr

133417
Lösung 133417 07.06.2017 aktualisiert um 18:28:44 Uhr
Goto Top
Hi.
Hier buggt nichts face-wink, 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ß
Yanmai
Yanmai 10.06.2017 um 13:24:09 Uhr
Goto Top
Vielen Dank face-smile