Wpf 在.Net Core 3.1中,使用dispatcher在另一个线程上调用-Config/Settings不是线程安全的 问题:
我正在尝试从第二个线程更新GUI。 不幸的是,标签保持不变。起初我认为调度器有问题,但它工作正常。配置似乎不是线程安全的 要复制的代码: 我有一个设置文件,主要用于在应用程序重新启动期间保持变量的持久性: 这是更新代码:Wpf 在.Net Core 3.1中,使用dispatcher在另一个线程上调用-Config/Settings不是线程安全的 问题:,wpf,multithreading,.net-core,configuration,dispatcher,Wpf,Multithreading,.net Core,Configuration,Dispatcher,我正在尝试从第二个线程更新GUI。 不幸的是,标签保持不变。起初我认为调度器有问题,但它工作正常。配置似乎不是线程安全的 要复制的代码: 我有一个设置文件,主要用于在应用程序重新启动期间保持变量的持久性: 这是更新代码: // get the amount of tickets created for me last week int amountOftickets = JiraInterface.DayStatisticsGenerator.GetLastWeeksTicketAmount(
// get the amount of tickets created for me last week
int amountOftickets = JiraInterface.DayStatisticsGenerator.GetLastWeeksTicketAmount();
config.Default.Lastweekstickets = amountOftickets; // int == 12;
// Update GUI on GUI thread
mainWindow.Dispatcher.Invoke(() =>
{
mainWindow.SetIconsAccordingtoConfig();
mainWindow.NumberTicketsCreated.Content = config.Default.Lastweekstickets.ToString(); // int == 0!!
});
有人知道如何将正在运行的配置从更新配置的线程推到Gui线程吗?快速查看文档后,您似乎有两个选项:
- 您可以使用Dispatcher.Invoke来设置config.Default 在GUI线程上
- 似乎.NET Core和.NET Framework支持同步设置数据库,这就是配置()
- 属性->配置设置->配置设计器.cs
private static Config defaultInstance=((Config)(global::System.Configuration.applicationsettingbase.Synchronized(new Config()))代码>
可能是创建此文件时未使用Synchronized,因此您的配置文件不是线程安全的,特别是如果它是在代码中而不是在designer/properties中创建的
从Microsoft文档开始设置数据库已同步:
如果IsSynchronized属性设置为true,索引器将以线程安全的方式获取和设置属性数据。默认情况下,SettingsBase实例不是线程安全的。但是,您可以在SettingsBase实例中调用同步传递,以使SettingsBase索引器以线程安全的方式运行