0

我正在努力visual studio使用Windows Phone. c#我正在使用一个线程,一旦线程完成,我需要在其中调用函数,但我的问题是我的线程中有一个 http 调用,所以线程在 http 调用结束之前进入完成阶段。仅当该 http 调用结束时,我才需要结束线程。但是现在线程在调用 http 调用后结束,那么我该如何克服这个问题,谢谢。这是我的代码

void worker_DoWork(object sender, DoWorkEventArgs e)
{
    Deployment.Current.Dispatcher.BeginInvoke(() =>
    {
        handle.MakeRequest(WidgetsCallBack, WidgetsErrorCallBack, 
                           DeviceInfo.DeviceId, ApplicationSettings.Apikey);
    });
}

void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    // function which i should call only after the thread is completed.
    // (http cll should also be ended)
}
4

1 回答 1

0

没有看到你正在做的 http 调用,我相信你正在做一个异步调用。因此,如果您想在不同的线程中运行 http 调用,那么您可以使用许多异步方法中的任何一种(例如DownloadStringAsync)。因此,您不需要线程来实现这一目标。这有帮助吗?

更新以提供基于以下评论的示例代码:

因此,我将使用 WebClient 对象并以异步方式调用 URL,而不是工作人员:

// Creating the client object:
WebClient wc = new WebClient();

// Registering a handler to the async request completed event. The Handler method is HandleRequest and is wrapped:
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(HandleRequest);

// Setting some header information (just to illustrate how to do it):
wc.Headers["Accept"] = "application/json";

// Making the actual call to a given URL:
wc.DownloadStringAsync(new Uri("http://stackoverflow.com"));

以及处理程序方法的定义:

void HandleRequest(object sender, DownloadStringCompletedEventArgs e)
{
    if (!e.Cancelled && e.Error == null)
    {
         // Handle e.Result as there are no issues:
         ...
    }
}
于 2012-09-28T10:11:35.770 回答