我正在嘗試學習如何使用 MAUI 創建移動應用程式,并且看到了許多我覺得不完整的 MVVM 示例。出于這個原因,我認為我應該先嘗試使用 CodeBehind 學習 MAUI,然后再轉向 MVVM。我已經完成了 Microsoft Learn 網站的 MAUI 部分,但它沒有涵蓋在 XAML 中顯示 websocket 資料。
我有以下內容:
XAML:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="CodeBehindTicker.MainPage">
<ScrollView>
<VerticalStackLayout>
<Label
Text="Ticker value"
x:Name="lblTicker" />
<Button
x:Name="btnGetTicker"
Text="Get Ticker"
Clicked="btnGetTicker_Clicked"/>
</VerticalStackLayout>
</ScrollView>
</ContentPage>
代碼隱藏:
using Binance.Net.Clients;
using Binance.Net.Objects;
namespace CodeBehindTicker;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void btnGetTicker_Clicked(object sender, EventArgs e)
{
var socketClient = new BinanceSocketClient(new BinanceSocketClientOptions { });
socketClient.SpotStreams.SubscribeToBookTickerUpdatesAsync("BTCUSDT", data => {
lblTicker.Text = data.Data.BestAskPrice.ToString();
Console.WriteLine(data.Data.BestAskPrice.ToString());
});
socketClient.UnsubscribeAllAsync();
}
}
當我單擊按鈕時,websocket 資料會實時顯示在控制臺輸出中,但標簽僅顯示回傳的第一個資料,并且不會自動更新,因為控制臺輸出中的資料會立即更新。
知道為什么嗎?現在,我只想堅持基本的 CodeBehind 而不使用 MVVM。
uj5u.com熱心網友回復:
我的猜測是,由于您使用的 WebSocket 可能有一些異步代碼,因此主執行緒上的文本不會更改。
您需要做的就是這樣的:
MainThread.BeginInvokeOnMainThread(() =>
lblTicker.Text = data.Data.BestAskPrice.ToString());
希望這可以幫助
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/515701.html
