[英]C# async/await and showing dialog
如何處理,如果需要在await函數內部顯示對話框?
例如plz考慮以下c#偽代碼:
async Task loginButton_Click(...args...)
{
disable_some_gui_controls();
var svc = new WebSite();
// get captcha from user
svc.OnCaptcha += () =>
{
var captcha = new CaptchaForm();
captcha.ShowDialog(this);
return captcha.UserCaptcha;
}
// login may ask captcha
await svc.Login("user", "password");
if (login.Success)
enable_some_gui_controls();
}
從等待代碼運行對話框會導致跨線程異常。
class WebSite
{
public delegate string Captcha();
public event Captcha OnCaptcha;
public async Task<bool> Login(...args...)
{
...
if (needs captcha)
{
string captchaText = OnCaptcha();
...
}
}
}
使用invoke可以在主線程上調用表單方法:
var captcha = new CaptchaForm();
var result = captcha.Invoke(new MethodInvoker(delegate()
{
captcha.ShowDialog(this);
return captcha.UserCaptcha;
}));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.