WPF:UI 元素不以一种方法更新,但以类似的方法工作

问题描述 投票:0回答:1

我在 WPF 应用程序中有两个类似的异步方法:

EnableRegKeyAdmin 
DisableRegKeyAdmin
。这两种方法都应该更新 TextBox (
StatusBar_ValueBox
) 的文本并将 ProgressBar (
StatusBar_ProgressBar
) 设置为不确定。但是,虽然
DisableRegKeyAdmin 
方法按预期工作,但
EnableRegKeyAdmin 
方法不会更新 UI 控件,即使 UI 更新的代码在两种方法中看起来相同。

启用RegKeyAdmin方法

private async void EnableRegKeyAdmin(string machineName)
{
            try
            {
                MSRARegistryKeyModifier RegModifier = new MSRARegistryKeyModifier();

            //These two lines below are where the issue is occuring
                    StatusBar_ValueBox.Text = "Checking Connectivity..."; 
                    StatusBar_ProgressBar.IsIndeterminate = true;

                UpdateSearchIcon("Searching", Advanced_JumpfarmMode_MSRARegKeyChanger_FoundIcon);
                var PingResult = await PingAsync(machineName);
                if (PingResult.Item1)
                {
                    // DO STUFF
                }
                else
                {
                    Console.WriteLine(DateTime.Now + ": Could not connect to " + machineName);
                    UpdateSearchIcon("Fail", Advanced_JumpfarmMode_MSRARegKeyChanger_FoundIcon);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(DateTime.Now + ": " + "ERROR: " + ex.Message + Environment.NewLine);
            }
            StatusBar_ValueBox.Text = "";
            StatusBar_ProgressBar.IsIndeterminate = false;
        }

禁用RegKeyAdmin方法

 private async void DisableRegKeyAdmin(SCCMRegKeyMachine machine)
        {
            try
            {
                MSRARegistryKeyModifier RegModifier = new MSRARegistryKeyModifier();

                StatusBar_ValueBox.Text = "Checking Connectivity...";
                StatusBar_ProgressBar.IsIndeterminate = true;

                UpdateSearchIcon("Searching", Advanced_JumpfarmMode_MSRARegKeyChanger_FoundIcon);
                var PingResult = await PingAsync(machine.Name);
               

                if (PingResult.Item1)
                {
                   //DO STUFF
                }
                else
                {
                    Console.WriteLine(DateTime.Now + ": Could not connect to " + machine.Name);
                    UpdateSearchIcon("Fail", Advanced_JumpfarmMode_MSRARegKeyChanger_FoundIcon);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(DateTime.Now + ": " + "ERROR: " + ex.Message + Environment.NewLine);
            }
            StatusBar_ValueBox.Text = "";
            StatusBar_ProgressBar.IsIndeterminate = false;
        }

我尝试过的:

  • 检查这两种方法是否以相同的方式使用相同的数据调用。
  • 搜索了可能修改这些控件的代码库的其他部分,但没有找到。
  • 注释掉了 EnableRegKeyAdmin 函数中除 UI 更新之外的所有其他代码,问题仍然存在。
  • 使用 Dispatcher.Invoke() 确保将 UI 更新分派到主线程,但这没有什么区别。
  • 验证控件可见且未禁用。

附加信息: UI 更新在

DisableRegKeyAdmin
方法中起作用,但在
EnableRegKeyAdmin
方法中不起作用。 方法执行期间不会引发异常。 应用程序中的其他 UI 元素按预期更新,但这些特定控件不会在此特定方法中更新。

问题: 为什么我在 EnableRegKeyAdmin 方法中的 UI 更新没有生效,如何解决此问题?

c# wpf user-interface asynchronous
1个回答
0
投票

我以前见过这个问题,请执行以下操作:

© www.soinside.com 2019 - 2024. All rights reserved.