Я разрабатываю клиентское приложение на формах.Существует форма авторизации, и я отправляю запрос авторизации на сервер.Если статус в порядке, то рабочая форма запускается.Для запросов я использую Restsharp.Но у меня проблема с ответом.После десериализации я сохраняю значения в одном глобальном классе для рисования диаграммы и добавляем в сетку данных.
Проблема: этот асинхронный запрос выполняется некоторое время, и когда я загружаю рабочую форму, я вызываю метод для работы с ответными данными, но асинхронный метод не завершен, и в моем сингле я не получаю свои ответные данные.
Я попытался установить глобальный триггер, но не смог получить доступ из другого потока.Также я не смог сразу заполнить из другого потока, так как все элементы управления находятся в основном потоке.
//request for responcing data
public RestRequestAsyncHandle DataRsp( Action<IRestResponse<DataResponce>, RestRequestAsyncHandle> callback, int NumberOfManufacture)
{
string resource = "/api/data/" + NumberOfManufacture;
var request = new RestRequest(resource);
// request.RootElement = "AuthResponce";
request.Method = Method.GET;
request.RequestFormat = DataFormat.Json;
return Execute<DataResponce>(request, callback);
}
//global single class where i want to keep my responced data
public class GlobalState {
private GlobalState(){}
private static GlobalState instance;
public static GlobalState GetInstance()
{
if (instance == null)
instance = new GlobalState();
return instance;
}
private bool state = false;
private string[] time;
private int[] shift;
public string[] Time
{
get { return time; }
set { time = value; }
}
public int[] Shift
{
get { return shift; }
set { shift = value; }
}
}
//async request method where i deserialize json responce
private void Resp()
{
GlobalState gs = GlobalState.GetInstance();
gs.NumberOfManufacture = 1;
DataResponce[] dt = new DataResponce[]{};
var asyncHandle = Api.Api.GetInstance().DataRsp((x, y) =>
{
dt = Newtonsoft.Json.JsonConvert.DeserializeObject<DataResponce[]>(x.Content);
}, gs.NumberOfManufacture);
for (int i = 0; i < dt.Length; i++)
{
gs.Time[i] = dt[i].Time;
gs.Energy_resources[i] = dt[i].Energy_resources;
gs.Production[i] = dt[i].Production;
gs.Shift[i] = dt[i].Shift;
gs.Specific_consumption[i] = dt[i].Specific_consumption;
}
}
//system form load methon where i call the Resp metho and after this wants to work whith rsponced data
private void WorkingForm_Load(object sender, EventArgs e)
{
infoControl.Chart.init();
infoControl.Chart.DrawFromDgv(dataGrid.Datadgv);
Resp();
ControlsAdd ca = new ControlsAdd();
ca.AddDataToDataDgv(dataGrid.Datadgv);
}
Я хочу добавить их в элементы управления после получения данных и работы с ними, но так какАсинхронный метод не успевает завершиться, я получаю ошибку об отсутствии данных.Я новичок в асинхронном программировании и мне не приходилось работать с большими проектами. Спасибо.