Предисловие: Я любитель, так что простите мое невежество, пожалуйста ;-) Я пытаюсь выполнить веб-многофункциональную задачу (решение для онлайн-астрометрии), которая находится в отдельном классе из моего главного окна. Я хотел бы сделать это в фоновом режиме, чтобы сохранить основное окно активным (для регистрации сообщений в прокрутке LogTextBox).
В моем главном окне я называю это:Запустить HttpClient PostAsync в другом классе из MainWindow Background worker?
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: FYI, фоновой рабочий выйдет с первого уступчивого 'ожидания '. «DoWork» возобновляется в потоке пула потоков. Я нахожу это поведение запутанным (т. Е. Завершено увольняется «рано»), поэтому я рекомендую «Task.Run» над BGW, если вам это даже нужно. Который, конечно, вы не в этом случае. –
@ StephenCleary Да, я вроде бы ожидал, что что-то подобное случится. Единственный способ, с которым он мог бы работать, был бы, если бы он использовал свой собственный контекст синхронизации, который был бы беспредметным * без * ожиданий. Я добавлю это к ответу. – Luaan