2016-07-16 69 views
1

我的Xamarin iOS故事板上有一個按鈕。這個按鈕在我的代碼中觸發一個方法。此方法使HttpClient網絡調用,我想要執行狀態更新到用戶界面,以便用戶知道發生了什麼。如何從按鈕事件(或其他任務)更新UI

之類的東西:「發送」,「等待響應」, 超時」等。我有一個UITextView此

我發現的代碼幾塊那些聲稱能。做到這一點,但到目前爲止,沒有一個我嘗試過的工作,他們只是改變了TextView的值後,整個按鈕代碼已經完成運行,所以看起來好像新的文本值排隊,但沒有改變,而事件運行

我想從被觸發這樣做的方法:

ButtonRegister.TouchUpInside += EventSendRegisterRequest; 

這不起作用:

BeginInvokeOnMainThread(() => 
{ 
    TextResponseRegister.Text = "Sending."; 
}); 

無論是做這個的:

InvokeOnMainThread(() => 
{ 
    TextResponseRegister.Text = "Sending."; 
}); 

繼承人簡化EventSendRegisterRequest所示例代碼:

BeginInvokeOnMainThread(() => 
{ 
    TextResponseRegister.Text = "Sending."; 
}); 

var c = new Communication.Communication(); 
var taskRegister = Task.Run(async() => 
{ 
    return await c.RegisterUserAsync(username, password, password, email); 
}); 
taskRegister.Wait(5000); 

BeginInvokeOnMainThread(() => 
{ 
    TextResponseRegister.Text = "Done."; 
}); 

只有Done是不斷顯示出來。

我想要能夠從任何任務或UI事件更新UI。 我該怎麼做?

+0

你可以通過git或其他方式分享完整的代碼嗎? – jzeferino

回答

0

與異步裝飾按鈕事件的方法是這樣的:

private async void EventSendRegisterRequest(string username, string email, string password) 

,然後做該方法的更新這樣的:

InvokeOnMainThread(() => { 
    TextResponseRegister.Text = "Sending."; 
}); 

解決了我的問題。現在所有內容都直接顯示在用戶界面上。

相關問題