0

我目前正在开发一个应用程序,但对 wp7 开发来说相当新,我的主进程调用另一个类,该类使用 StreamReader 来读取网页的内容并分配变量。我遇到的问题是主进程试图在变量被赋值之前使用它们。有什么方法可以让主进程等到 StreamReader 完成

在主线程中,我有:

 locationDetails = new LocationResults();
 locationDetails.getResults(addressDetails);

然后在 LocationResults 类中

public void getResults(String address)
    {
        String addy, tmp;
        if (address[0] == '+')
        {
            tmp = address.Substring(1);
            addy = baseAddress + tmp + "&sensor=false";
        }
        else
            addy = baseAddress + address + "&sensor=false";

        WebClient webClient = new WebClient();
        webClient.OpenReadAsync(new Uri(addy));
        webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);

    }

    void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        String tmp;
        var reader = new StreamReader(e.Result);
        tmp = reader.ReadToEnd().ToString();
        results = tmp;
    }
4

1 回答 1

0

自从我使用 WP 7 和 .NET 以来已经有很长时间了,但我认为以下方法可能会有所帮助:

  1. 使用任务并行库来执行整个 getResult-Procedure 与您的主线程异步。
  2. 在任务中同步使用 WebClient 并返回读取的数据。
  3. 通过http://msdn.microsoft.com/en-us/library/hh194793.aspx指定一个继续操作并传递主线程的 TaskScheduler 实例,以便同步。
  4. 将影响结果的主线程代码放在您的继续操作中。

编辑:我猜代码应该是这样的:

Task.Factory.StartNew((adr)-> InvokeGetResult(adr as string), addressDetails)
   .ContinueWith((data) -> HandleDataSynchronousToMainThread(data),
      TaskScheduler.Current);

但是再一次:自从我编写最后一个 .NET 代码以来已经有很长时间了......

于 2013-04-01T17:06:02.477 回答