我的PlayerService班級:
public static class PlayerService
{
private static SQLiteAsyncConnection db;
/// <summary>
/// Creates database
/// if Its created already it will use that instance
/// </summary>
/// <returns></returns>
static async Task Init()
{
if(db != null)
return;
db = new SQLiteAsyncConnection(DatabaseConstants.DatabasePath);
await db.CreateTableAsync<Player>();
}
/// <summary>
/// Adds player to the database
/// </summary>
/// <param name="playerName"></param>
/// <param name="playerAlias"></param>
/// <param name="playerTeam"></param>
/// <returns>id</returns>
public static async Task AddPlayerAsync(string playerName, string playerAlias, string playerTeam = null)
{
await Init();
var player = new Player
{
Name = playerName, Alias = playerAlias, Team = playerTeam
};
await db.InsertAsync(player);
}
資料庫是在 中創建的Init(),但在異步時停止db.CreateTableAsync<Player>()而不拋出例外。
查看型號:
public partial class ManagePlayersPageViewModel : ObservableObject
{
/// <summary>
/// List of players being displayed
/// </summary>
[ObservableProperty] private ObservableCollection<Player> players;
public ManagePlayersPageViewModel()
{
Players = PlayerService.GetAllPlayersAsync().Result.ToObservableCollection();
}
我已經清理并重建、更新了依賴項并擁有raw.bundle.green.
uj5u.com熱心網友回復:
您的代碼“陷入僵局”。此 Xamarin.Forms Q&A 解釋了這個概念。SQLite-NET-PCL 卡在 CreateTableAsync() 上。
底線:不要.Result與async方法一起使用。特別是在建構式中。async相反,通過包裝該代碼進入背景關系。
毛伊島:
MainThread.BeginInvokeOnMainThread( async () =>
{ // On MainThread.
var players1 = await PlayerService.GetAllPlayersAsync();
Players = players1.ToObservableCollection();
});
或者,如果GetAllPlayersAsync需要很長時間,從后臺執行緒呼叫它可能更安全:
Task.Run( async () =>
{ // On background thread.
var players1 = await PlayerService.GetAllPlayersAsync();
// Because Players affects UI, safest to get back on MainThread:
MainThread.BeginInvokeOnMainThread( async () =>
{ // On MainThread.
Players = players1.ToObservableCollection();
});
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/526234.html
標籤:。网sqlite毛伊岛
上一篇:嘗試更新單元格時出現意外結果
下一篇:在螢屏上顯示方法的結果
