Mein Fenster klickt nach dem Klicken auf "Senden". Es sendet Datei und dann sollte es GUI freigeben, aber es tut es nicht. Sehen Sie meinen Code:WPF-Fenster friert ein, nachdem Datei an Dropbox gesendet wurde
private void btn_send_Click(object sender, RoutedEventArgs e)
{
if (SBox.UploadFile("user", "service", 1, path.Text))
MessageBox.Show("Success");
else
MessageBox.Show("Fail, try again");
}
Dann Code von S-Box-Klasse:
public static bool UploadFile(string user, string service, int orderId, string filepath)
{
DateTime now = DateTime.Now;
dbx = new DropboxClient(login_key);
string path = "/Files/" + user + "/" + service + "/order - " + orderId + "/received";
string fileName = now.Year + "" + now.ToString("MM") + "" + now.ToString("dd") + "" + Path.GetExtension(filepath);
Task upl = Upload(dbx, path, fileName, File.ReadAllBytes(filepath)); //send file
upl.Wait();
return true;
}
und Aufgabencode:
static async Task Upload(DropboxClient dbx, string folder, string file, byte[] content)
{
using (var mem = new MemoryStream(content))
{
var updated = await dbx.Files.UploadAsync(
folder + "/" + file,
WriteMode.Overwrite.Instance,
body: mem);
Console.WriteLine("Saved {0}/{1} rev {2}", folder, file, updated.Rev);
}
}
wie gesagt, ist Aktenordner zu korrigieren senden aber GUI friert. Die Konsolen-App funktioniert perfekt und schreibt beim Erfolg die Ausgabe.
Run() nicht tritt als Methode. Ich habe gerade upl.Wait() gelöscht und es funktioniert, das Problem ist, weiß nicht, wann das Hochladen der Datei abgeschlossen ist. – arti
Ah, mein Fehler. Ich habe immer Task.Run (Methode) verwendet, aber es ist eigentlich eine statische Methode. https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.run(v=vs.110).aspx – Joe
Sie wissen, wenn es fertig ist, schreiben Sie in die Konsole "Gespeichert. .. " – Joe