在我的Silverlight应用程序中,我将WCF调用放在我的ViewModel类中。
DateTime CurrentDateTime;
internal void GetDateTime()
{
var client = new WcfClient();
client.GetCurrentDateTimeCompleted += GetCurrentDateTimeCompleted;
client.GetCurrentDateTimeAsync();
}
private void GetCurrentDateTimeCompleted(object sender, GetCurrentDateTimeCompletedEventArgs args)
{
try
{
CurrentDateTime = args.Result;
}
然后在我的代码后面的代码some.xaml.cs文件中。我有一个复选框点击事件。
private void CheckBox_Clicked(object sender, RoutedEventArgs e)
{
var msgBoxControl = new MessageBoxControl();
msgBoxControl.Closed -= MessageBoxYesNo_Closed;
msgBoxControl.Closed += MessageBoxYesNo_Closed;
在方法MessageBoxYesNo_Closed
中,我在ViewModel类中调用该方法。
private void MessageBoxYesNo_Closed(object sender, EventArgs e)
{
try
{
this.ViewModel.GetDateTime();
curDateTime = this.ViewModel.CurrentDateTime;
我的问题是,有时行curDateTime = this.ViewModel.CurrentDateTime;
在wcf调用完成方法之前执行,因此我无法获得正确的值。
我猜可能有两个线程,一个在UI中,另一个在服务调用中?请不要使用async / await,因为我必须使用Visual Studio 2010。
由于
答案 0 :(得分:0)
获取解决方案,只需添加一个while循环:
static void Main(string[] args)
{
Program p = new Program();
p.MakeAsync().Wait();
}
public async Task MakeAsync()
{
Console.WriteLine("I'm about to call");
CallMe c = new CallMe();
bool x = await c.CallBingMapsAsync(49931);
Console.WriteLine("I called and the result was {0}", x);
}