wcf调用已完成事件未按正确顺序触发

时间:2016-07-20 16:07:32

标签: c# visual-studio-2010 wcf silverlight

在我的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。

由于

1 个答案:

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