Я пытаюсь дождаться окончания класса с помощью экземпляра.
Моя архитектура следующая. Кук является неотъемлемой частью CookChief.
И если я создаю экземпляр cook, CookChief создает сам, но CookChief вызывает 1 другой класс с именем Cookhelper, cookhelper ждет ввода, и для этого метода ввода я хочу ждать в Cook.
Дело в том, что я создаю это в MVVM Galasoft, и моя точка входа - это CookViewmodel, с relaycommand.
В коде ниже вы можете увидеть мою архитектуру. Короче говоря, я хочу подождать, пока этот bool не будет обработан = await Task.Run (() => ValidateForDeviceId ()); закончено.
Моим первым шагом был аутсорсинг конструктора каждого класса. И создайте метод init.
Это мой код:
public CookViewModel()
{
startCookButtonCommand = new RelayCommand(Cook);
}
private async Task Cook()
{
cook.Init();
}
public class Cook : CookChief
{
public Cook()
{
}
public async Task Init()
{
await this.CookChiefInit();
//here I want to wait until CookChiefInit is finished
Cooking();
}
public void Cooking()
{
MessageBox.Show("Input received");
}
}
Теперь Повар:
public Cookchief()
{
}
protected async Task CookchiefInit()
{
this.Cookhelper = new Cookhelper();
Cookhelper.CookHelperInit();
}
И в CookHelper мы делаем это:
public CookHelper()
{
}
public void CookHelperInit()
{
this.driverWindow = new DriverWindow();
startProc();
}
private async void startProc()
{
ShowOrCloseDriverWindow(true);
//this is the task what we wait for before we can repeat
bool processed = await Task.Run(() => ValidateForDeviceId());
if(processed)
{
ShowOrCloseDriverWindow(false);
}
else
{
MessageBox.Show("DriverError");
}
}
private bool ValidateForDeviceId()
{
for (; ; )
{
this.deviceId = Input.deviceId;
if (deviceId > 0)
{
break;
}
}
return true;
}