J'ai un problème avec le dialogue MessageBox
, normalement, le MessageBox gèlera et bloquera les fenêtres, et montrera sur le dessus des fenêtres courantes jusqu'à ce que l'utilisateur cliquent sur le bouton de messagebox, mais j'ai le the messagebox ne peut pas bloquer et geler les fenêtres courantes sur VSTO
bouton rubanComment geler la fenêtre de perspectives sur VSTO?
private async void BtnTest_Click(object sender, RibbonControlEventArgs e)
{
MessageBox.Show("before");
var task = await DoSomethingAsync();
MessageBox.Show("after");
}
private async Task<bool> DoSomethingAsync()
{
await Task.Delay(1000);
return true;
}
le premier MessageBox peut geler les fenêtres, mais le second ne peut pas, après enquête je l'ai trouvé causé par l'await, quand j'attendre jusqu'à ce DoSomethingAsync
fini, la deuxième MessageBox sera normalement geler et bloquer les fenêtres en cours
private void BtnTest_Click(object sender, RibbonControlEventArgs e)
{
MessageBox.Show("before");
var task = DoSomethingAsync();
task.Wait();
var result = task.Result;
MessageBox.Show("after");
}
mais je ne veux pas bloquer l'interface utilisateur Office Outlook Robbin
, donc je veux exécuter le DoSomethingAsync
asynchrone, quelqu'un sait comment y remédier?
Alors que cela signifie? la deuxième boîte de message est montrée, mais vous pouvez toujours interagir avec la fenêtre principale d'Outlook même la boîte de message est montrée? –
@DmitryStreblechenko, oui, vous avez raison –
Cela signifie que la boîte de message n'est pas correctement parented - Cast Application.ActiveWinow à IOleWindow et appelez IOleWindows :: GetWindow pour obtenir la fenêtre HWND. Vous pouvez ensuite l'utiliser pour afficher la boîte de message. –