问题描述
我无法实时更新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 (将#修改为@)