首页 > 解决方案 > Xamarin 表单,Sqlite 等待 DeleteAsync

问题描述

我学习 Xamarin,我使用一个函数来删除我所有的 sqlite 数据库,添加新元素并刷新我的列表视图。

代码停止,我认为是因为它没有时间先删除,添加数据库然后刷新列表视图。当我添加一个计时器(2 秒)时,它可以工作。

这是“mywordsdatabase.DeleteAllWords();”行的错误 : System.ArgumentOutOfRangeException: '索引超出范围。必须是非负数且小于集合的大小。参数名称:索引'

我正在使用这个 sqlite 插件在此处输入链接描述

这是功能:

public async void DeleteAndUpdate(){

mywordsdatabase.DeleteAllWords(); // the error occur here

List<MyWords> WordUserList = await wordmanager.GetWordAsync(UserConnected.MyId);

foreach (MyWords w in WordUserList)
{
    mywordsdatabase.AddWord(w);

}


var WordList = await mywordsdatabase.GetWords();


Device.BeginInvokeOnMainThread(() => { WordSList.ItemsSource = WordList; });
}

这是sqlite的删除功能:

class MyWordsDatabase
{
    private SQLiteAsyncConnection conn;

//CREATE  
    public MyWordsDatabase()
    {
        conn = DependencyService.Get<ISQLite>().GetConnection();
        conn.CreateTableAsync<MyWords>();
    }

      public string AddWord(MyWords mywords)
        {
            conn.InsertAsync(mywords);
            return "success";
        }
    public string DeleteAllWords()
    {
        conn.DeleteAllAsync<MyWords>();
        return "success";
    }
}

谢谢你的帮助

标签: c#xamlxamarin.forms

解决方案


public async Task<string> AddWord(MyWords mywords)
    {
        string result=string.Empty;
        try
        {
           await conn.InsertAsync(mywords);
        }
        catch (Exception ex)
        {
        }
        return result;
    }
    public async Task<string> DeleteAllWords()
    {
        string result = string.Empty;
        try
        {
            await conn.DeleteAllAsync<MyWords>();
        }
        catch (Exception ex)
        {
        }
        return result;
    }

    public async void DeleteAndUpdate()
    {
        try
        {
           await mywordsdatabase.DeleteAllWords(); // the error occur here
            List<MyWords> WordUserList = await wordmanager.GetWordAsync(UserConnected.MyId);
            foreach (MyWords w in WordUserList)
            {
              await  mywordsdatabase.AddWord(w);

            }
            var WordList = await mywordsdatabase.GetWords();
            Device.BeginInvokeOnMainThread(() => { WordSList.ItemsSource = WordList; });
        }
        catch (Exception ex)
        {
        }
    }

推荐阅读