這是我的winform,它是從VSTO插件打開的。它上有一個按鈕,觸發一個異步任務(一個異步Web請求)和響應是否滿意其關閉形式:(異步)等待後關閉窗體
public partial class MyForm : Form
{
private async void Btn_Click(object sender, EventArgs e)
{
var response = await doAsyncRequest();
if (response.Worked())
{
Close();
}
}
}
一切都很好,直到達到Close()
調用close形式,這裏的中例外:System.InvalidOperationException - Additional information: Cross-thread operation not valid: Control 'MyForm' accessed from a thread other than the thread it was created on.
當從VSTO功能區直接啓動時,其他異步/等待的東西工作正常。
*應該*可以,假設'doAsyncStuff'剛剛返回一個'Task',並且在UI線程上調用了'Btn_Click' ... –
2014-09-06 10:54:08
這個炸彈當你自己關閉窗口時代碼呢。還有另一個線程可以阻止應用程序終止。使用調試器的Debug + Windows +線程來查看正在運行的線程。並且窗體的Enabled屬性可以避免這種DoEvents失敗模式。 – 2014-09-06 11:52:13
doAsyncStuff在做什麼?它以任何方式訪問用戶界面嗎? – 2014-09-08 07:02:42