前言:我是一個愛好者,所以請原諒我的無知;-) 我試圖執行一個基於Web的多功能任務(在線天文板解決方案),它位於與我的主窗口不同的一個類中。我想在後臺執行此操作以保持主窗口處於活動狀態(用於在滾動的LogTextBox中記錄消息)。
在我的主窗口中我稱之爲:在MainWindow Background worker的另一個類中運行HttpClient PostAsync?
public void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Astrometry ast = new Astrometry();
ast.OnlineSolve(GlobalVariables.SolveImage);
}
而在天體類停靠在等待httpClient.PostAsync(... 返回到主窗口,並沒有什麼事情發生
class Astrometry
{
public void OnlineSolve(string image)
{
GetSession(apikey);
}
private async void GetSession(string apikey)
{
...misc code
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpContent contentPost = new StringContent(input, Encoding.UTF8, "application/x-www-form-urlencoded");
using (var response = await httpClient.PostAsync(baseAddress, contentPost))
{
string responseData = await response.Content.ReadAsStringAsync();
...more stuff
}
}
我想知道這是不是可以這樣做... 在此先感謝!
謝謝!工作得很好,我接受了您的建議並淘汰了後臺工作人員。 – ksipp01
@Luaan:僅供參考,後臺工作人員將在第一次產生「await」時退出。 DoWork在線程池線程上恢復。我發現這種行爲混淆了(即,「完成」被激發爲「早期」),所以如果你需要的話,我推薦BGW上的Task.Run。這當然不在這種情況下。 –
@StephenCleary是的,我有點期待這樣的事情會發生。如果它使用了自己的同步上下文,那麼它能夠工作的唯一方法就是如果沒有等待,這將是毫無意義的。我會將其添加到答案中。 – Luaan