Ich versuche einen Code zu schreiben, der ausgeführt wird, wenn eine Bedingung erfüllt ist. Momentan verwende ich while ... Schleife, von der ich weiß, dass sie nicht sehr effizient ist. Ich schaue auch auf AutoResetEvent(), aber ich weiß nicht, wie man es so implementiert, dass es überprüft, bis die Bedingung wahr ist.C# Warte, bis die Bedingung wahr ist
Der Code passiert auch innerhalb einer asynchronen Methode zu leben, so könnte eine Art warten könnte funktionieren?
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
}
}
Ich muss einen Weg finden, ohne in einer Schleife stecken CPU Überprüfung isExcelInteractive()
zu halten.
Hinweis: In Excel gibt es keinen Event-Handler, der ausgelöst würde, wenn er sich nicht im Bearbeitungsmodus befindet.
Wer ändert isExcelInteractive Wert? – Peyman
'isExcelInteractive()' ist eine Methode, um zu überprüfen, ob Excel beschäftigt ist. Es wird True zurückgegeben, wenn Excel nicht im Bearbeitungsmodus ist. Es ist etwas, was ich überprüfen muss, bis es wahr ist, und es gibt keine Event-Handler für diese – Keylee
Ich denke, Sie brauchen hier keine async-Methode, haben Sie meine Antwort überprüft? – Peyman