2016-04-21 13 views
-3

Ich möchte eine Lücke Funktion auszuführen, die auf einen Textblock in WPF schreibtWie schreibe ich eine Funktion mit Async und Wartetechniken?

private async Task<int> TASK_ClickthroughBuild(string server, int frame, int click) 
{ 
    if (server == "value") 
    { 
     CreativeCode.Inlines.Add(openScript + newLine); 
     CreativeCode.Inlines.Add("var " + click + " = '%%CLICK_URL_ESC%%%%DEST_URL%%';" + newLine); 
     CreativeCode.Inlines.Add("var " + frame + " = document.getElementById('" + frame + "');" + newLine); 
     CreativeCode.Inlines.Add(frame + ".href = " + click + ";" + newLine); 
     CreativeCode.Inlines.Add(closeScript); 
     PASSBACKframeINT = frame;    
    } 
    return PASSBACKframeINT; 
} 

Die obige Funktion gibt einen Integerwert und schreibt Code in einen Textblock.

Dies ist die zweite Funktion.

private async Task clickElementBuild() 
{ 
    CreativeCode.Inlines.Add("<a href='#' id='" + PASSBACKframeINT + "' target='_blank' class='" + PASSBACKwrapINT + "' >" + newLine); 
    CreativeCode.Inlines.Add("<div class='" + PASSBACKblockINT + "' id='" + overlayINT + "'></div>" + newLine); 
} 

Die zweite Funktion, muss der Code den Textblock-Code über die erste Funktion schreiben, sondern hängt von dem Rückgabewert von erster Funktion richtig zu schreiben.

Also muss ich dies in einem asynchronen Format schreiben. Kann ich Zeiger oder einen besseren Weg dazu haben?

Danke

+12

Ihr Titel ist schlecht. –

+1

Warum müssen Sie dies asynchron tun? Scheint alles ist synchron ... – Aron

+0

wegen der anderen Funktion, die den Rückgabewert benötigt, um die korrekten Werte in den Textblock zu schreiben. PASSBACKframeINT Wird von der zweiten Funktion benötigt, aber die Textzeilen der zweiten Funktionen müssen über dem Text der ersten Funktion liegen. – KaiMHirst

Antwort

-3

Sortiert. Im Grunde geben Sie den Wert zurück und verwenden Async, um zuerst auf den zurückgegebenen Wert zu warten.

-2

Ich gehe davon aus, dass Sie .NET 4.5 verwenden, oder Sie hätten eine Threading-Lösung gewählt.

Beim Aufruf einer asynchronen Funktion teilt der Mainthread grundsätzlich alles einem Backgroundthread mit.

Da asynchrone Funktionen aufgerufen werden, gibt es das "Risiko einer weichen Datenkonsistenz". Wie in Ihrem Fall oder in einfacheren Worten die Analogie von Forms.show() und Forms.showDialog().

Es gibt mehrere Möglichkeiten, dies zu umgehen. Threading löst dieses Problem mit JOIN() OR WaitAll() und Asynchron mit System.Threading.Thread.Sleep (x) oder einige bevorzugen Application.DoEvents()

Sie ein platzieren können Await-For-Background-Task- Klausel über Ihrem Code, der Gefahr der "weichen Datenkonsistenz" oder legen Sie den Code es in den Mainthread.

Wenn Sie neu bei asynchronen Funktionen sind. Ich empfehle dieses Tutorial, um es zu verwenden.

https://visualstudiomagazine.com/articles/2014/06/01/how-to-simplify-asynchronous-programming.aspx

+1

Verwenden Sie nicht Threading. Verwenden Sie Task und async/warten Sie wann immer Sie können. Async und await starten auch keinen neuen Thread. Es ist asynchron, nicht "parallel" –

+0

Beenden Sie die Quibbling. Ich sagte im Grunde. – Maxwell

+3

Nein. Dies ist eines der größten Missverständnisse von async/erwarten. Ich möchte nicht, dass das OP später verwechselt wird. –

Verwandte Themen