C#Firesharp-如何实时更新Winforms值

问题描述

我无法实时更新WinForms应用程序,无法在firesharp实时数据库中更新值。

当我尝试下面的代码时,Debug.Writeline()(来自listenForChanges()方法)被触发,显示新数据,但是随后显示

Exception thrown: 'system.invalidOperationException' in System.Windows.Forms.dll
Exception thrown: 'system.invalidOperationException' in System.Windows.Forms.dll
Exception thrown: 'system.invalidOperationException' in mscorlib.dll
Exception thrown: 'system.invalidOperationException' in mscorlib.dll

我很确定问题与尝试从UI线程以外的其他线程更新Winforms值有关,但我不确定如何解决

我尝试在reloadData()底部添加一个listenForFhanges(),但这不起作用。

基本上,我希望我的listBox1随着新值进入数据库而更新。

任何帮助,我们将不胜感激。

这是我的winforms代码

private async void Form_Load(object sender,EventArgs e)
        {
            client = new FireSharp.FirebaseClient(config);

            await reloadData();

            await listenForChanges();

        }
private async Task reloadData()
        {           
            listBox1.Items.Clear();

            Dictionary<string,EntryData> keyvaluePairs = null;


            await Task.Run(async () =>
                {
                    FirebaseResponse firebaseResponse = await client.GetAsync("Users/" + username + "/EntriesList/");
                    keyvaluePairs = firebaseResponse.ResultAs<Dictionary<string,EntryData>>();
                });


            usernameLabel.Text = username;

            portalImportsLeftCount.Text = string.Empty;


            if (keyvaluePairs != null)
            {
                List<string> keysList = keyvaluePairs.Keys.ToList();

                keysList.sort((a,b) => b.Compareto(a));


                foreach (string item in keysList)
                {
                    listBox1.Items.Add(item);
                }
            }           
        }

private async Task listenForChanges()
        {
            bool reloadBool = false;

            response = await client.OnAsync("Users/" + username + "/EntriesList/",added: (s,args,context) =>
            {
                Debug.WriteLine("Data Added: " + args.Data); // <-- writes out values that have been added to the database

                
                Task.Run(async () =>
               {
                   await reloadData();
               });                
            },changed: (s,context) =>
            {
                Debug.WriteLine("Data changed: " + args.Data);
            },removed: (s,context) =>
             {
                 Debug.WriteLine("Data deleted: " + args);
             });
        }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)