0

我有一个 WPF C# GUI 应用程序,它有许多菜单栏、按钮和网格控件。

在主 XAML 表单类中,我有五个 System.Timer.Timer 对象,它们在类级别声明,然后在 XAML 表单类构造函数中创建和实例化,如下所示(一个示例)

var factory = new TaskFactory();

                factory.StartNew(() =>
                                    {
                                        dtEmergencyQueueRefresh = new System.Timers.Timer(EmerTimeoutSecs * 1000);
                                        dtEmergencyQueueRefresh.Elapsed += dtEmergencyQueueRefresh_Tick;
                                        dtEmergencyQueueRefresh.Enabled = true;
                                    }
                                );

我这样做是为了让它们肯定会在后台线程上启动并运行,因为我注意到 GUI 性能很慢,但这似乎没有帮助。

当我注释掉所有用于启动计时器的代码并将它们保留为空声明时,GUI 按预期执行并且很好。

当我说性能下降时,点击仍然可以正常工作,但是当您下拉菜单时,“悬停”功能在大约 5-10 秒内不起作用,因此您所在的行不会突出显示,除非您等待 5 -10 秒,正如我所说。

我还尝试进入计时器调用的回调方法并注释掉所有代码,以便计时器只是执行空方法。性能仍然很差,所以只运行了 5 个定时器并且什么都不调用,仍然降低了性能,所以不是后台处理降低了性能,而是让定时器完全运行。

有没有人对为什么会发生这种情况以及如何让这些计时器在后台运行而不影响 GUI 有任何建议?

4

0 回答 0