0

を使用するvisual studioために取り組んでいます。スレッドが完了したら関数を呼び出す必要があるスレッドを使用していますが、スレッドに http 呼び出しがあるため、http 呼び出しが終了する前にスレッドが完了段階に移動するという問題があります。そのhttp呼び出しが終了したときにのみスレッドを終了する必要があります。しかし、http呼び出しが呼び出された後にスレッドが終了するようになったので、どうすればこの問題を克服できますか? ここに私のコードがありますWindows Phonec#

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 に答える