c#Firesharp-如何实时更新winforms值
使用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
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);
});
}