2016-04-21 64 views
-3

我希望运行写入到文本块中WPF如何使用Async和Await技术编写函数?

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; 
} 

上述函数返回一个整数值,并写入代码到文本块的空隙功能。

这是第二个功能。

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

第二个函数的代码需要写的文本块代码上面的第一个功能,而是取决于第一个函数的返回值来写正确。

所以我需要以异步格式写这个。我可以有指针或更好的方式来做到这一点?

谢谢

+12

Your title is bad。 –

+1

为什么你需要异步做到这一点?似乎一切都是同步的...... – Aron

+0

,因为其他函数需要返回值才能将正确的值写入文本块。 PASSBACKframeINT第二个函数需要使用第二个函数文本行,而第二个函数文本行需要位于第一个函数的文本之上。 – KaiMHirst

回答

-3

已排序。基本上,返回值并使用Async首先等待返回的值。

-2

我假设你使用.NET 4.5,否则你会选择Threading-Solution。

调用异步函数基本上告诉Mainthread将所有内容传递给Backgroundthread。

由于异步函数被调用,所以存在“软数据一致性的风险”。就像你的情况一样,或者用更简单的话来说就是Forms.show()和Forms.showDialog()的类比。

有几种方法可以绕过这一点。 线程解决这一JO​​IN与()或为WaitAll() 和异步与System.Threading.Thread.Sleep(x)或一些人喜欢Application.DoEvents()

您可以将一个等待换背景 - 任务 - 您的代码上方的条款 存在“软数据一致性”的风险,或者将代码放入Mainthread中。

如果您不熟悉异步功能。我推荐这个教程来使用它。

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

+1

请勿使用线程。尽可能使用任务和异步/等待。此外,异步和等待不会启动新线程。它是异步的,而不是“并行的” –

+0

退出嘀嗒。我基本上说过。 – Maxwell

+3

不是。这是异步/等待最大的误解之一。我不想让操作系统后来感到困惑。 –