Я пытаюсь написать код, который выполняется при выполнении условия. В настоящее время я использую while... loop, который, как я знаю, не очень эффективен. Я также смотрю на AutoResetEvent(), но я не знаю, как его реализовать, чтобы он продолжал проверять, пока условие не будет истинным.
Кроме того, код живет внутри метода async, так что может быть какой-то ожидание может работать?
private async void btnOk_Click(object sender, EventArgs e)
{
// Do some work
Task<string> task = Task.Run(() => GreatBigMethod());
string GreatBigMethod = await task;
// Wait until condition is false
while (!isExcelInteractive())
{
Console.WriteLine("Excel is busy");
}
// Do work
Console.WriteLine("YAY");
}
private bool isExcelInteractive()
{
try
{
Globals.ThisWorkbook.Application.Interactive = Globals.ThisWorkbook.Application.Interactive;
return true; // Excel is free
}
catch
{
return false; // Excel will throw an exception, meaning its busy
}
}
Мне нужно найти способ продолжить проверку isExcelInteractive()
без застревания процессора в цикле.
Примечание. В Excel нет обработчика событий, который был бы поднят, когда он не находится в режиме редактирования.