В любом случае, я изо всех сил пытаюсь обернуть голову вокруг возврата задачи. У меня есть метод (ниже), который выполняет вызов API и обрабатывает анализ JSON. В моей первой версии у меня был бесконечный цикл, который непрерывно передавал данные по последовательному порту на небольшой дисплей ESP32 и не требовал ничего возвращать.
Однако сейчас я создаю правильный пользовательский интерфейс и получение данных формы пользовательского ввода для выполнения вызова API, а затем передача дополнительных сведений для хранения в моей базе данных.
Код: Выделить всё
public async Task FetchSatName(string NoradId) {
SatelliteInfo sat = new SatelliteInfo();
var parser = new ParseJson();
var user = new UserInfo();
sat.NoradId = int.Parse(NoradId);
var simpleuri = "https://api.n2yo.com/rest/v1/satellite/tle/" + sat.NoradId + "&apiKey=" + user.ApiKey;
var client = new HttpClient();
var request = new HttpRequestMessage {
Method = HttpMethod.Get,
RequestUri = new Uri(simpleuri),
};
using (var response = await client.SendAsync(request)) {
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
sat.SatelliteName = parser.JMethodString(body);
sat.NoradId = parser.JMethodDub(body);
var list = parser.JMethodList(body);
Console.WriteLine("\n\nSat: \t\t" + sat.SatelliteName);
Console.WriteLine("SatID: \t\t" + sat.NoradId);
return sat;
}
}
Код: Выделить всё
public class SatelliteInfo
{
public string SatelliteName { get; set; }
public int NoradId { get; set; }
public decimal Period { get; set; }
}
Код: Выделить всё
private void addSatelliteIDButton_Click(object sender, EventArgs e)
{
if (ValidateSatelliteIDForm())
{
SatelliteInfo satellite = new SatelliteInfo();
satellite.NoradId = int.Parse(newSatelliteIDBox.Text);
// TODO -- Fix to take in satellite object
var satReturned = FetchSatName(newSatelliteIDBox.Text);
// Do other things, then store data in db
}
else
{
MessageBox.Show("Enter a valid Norad ID");
}
}
Снимок экрана формы
Конечно, мы очень ценим любую помощь.
Я старался просто не использовать асинхронную функцию, но со всеми методами HTTP-клиента (несколько у меня в голове, как на самом деле работает асинхронность), это было кричит на меня, что это должно быть асинхронно.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ync-method
Мобильная версия