Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#Firesharp-如何实时更新winforms值_C#_Firebase_Winforms_Firebase Realtime Database_Fire Sharp - Fatal编程技术网

c#Firesharp-如何实时更新winforms值

c#Firesharp-如何实时更新winforms值,c#,firebase,winforms,firebase-realtime-database,fire-sharp,C#,Firebase,Winforms,Firebase Realtime Database,Fire Sharp,使用firesharp实时数据库中更新的值实时更新WinForms应用程序时遇到问题 当我尝试下面的代码时,会触发Debug.Writeline()(来自listenForChanges()方法)以显示新数据,但随后会显示: Exception thrown: 'System.InvalidOperationException' in System.Windows.Forms.dll Exception thrown: 'System.InvalidOperationException' in

使用firesharp实时数据库中更新的值实时更新WinForms应用程序时遇到问题

当我尝试下面的代码时,会触发
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()
添加到
listenforchanges()
的底部,但这不起作用

基本上,我希望我的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();
字典keyValuePairs=null;
等待任务。运行(异步()=>
{
FirebaseResponse FirebaseResponse=wait client.GetAsync(“Users/”+username+“/EntriesList/”);
keyValuePairs=firebaseResponse.ResultAs();
});
usernamelab.Text=用户名;
portalImportsLeftCount.Text=string.Empty;
if(keyValuePairs!=null)
{
List keysList=keyValuePairs.Keys.ToList();
keysList.Sort((a,b)=>b.CompareTo(a));
foreach(键列表中的字符串项)
{
列表框1.Items.Add(item);
}
}           
}
private异步任务listenForChanges()
{
bool reloadBool=false;
response=wait client.OnAsync(“Users/”+username+“/EntriesList/”,
添加:(s,args,context)=>
{
Debug.WriteLine(“添加的数据:“+args.Data”);//
{
等待重新加载数据();
});                
},
已更改:(s,args,context)=>
{
Debug.WriteLine(“数据更改:+args.Data”);
},
已删除:(s,args,context)=>
{
Debug.WriteLine(“数据删除:+args”);
});
}

调试它。查找引发异常的行。阅读异常消息(这非常重要)。
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, args, context) =>
            {
                Debug.WriteLine("Data changed: " + args.Data);
            },
                removed: (s, args, context) =>
             {
                 Debug.WriteLine("Data deleted: " + args);
             });
        }