尝试使文本框填充每三秒更改一次的变量



我正在尝试使 WPF C# 应用程序中的文本框从使用 WCF 从外部数据库收集的变量填充文本框,但运气不佳。目前,文本框显示 ScoreBoardClientTest.FeedServiceAgent 而不是可用的代理值。在OnMessageReceived中使用这行代码时,我能够使这些完全相同的代码在控制台应用程序中工作

console.writeline(e.cmsdata.skill.agentsavailable.tostring()); 

所以我想我可以在这里做类似的事情。任何帮助了解我哪里出了问题都会很棒。

显示编号是文本框的名称。

public void TextBlock_Loaded(object sender, EventArgs e)
        {                        
            using (var data = new FeedServiceAgent())
            {
                data.MessageReceived += OnMessageReceived;             
                data.Subscribe("92", 3);
                DisplayNumber.Text = data.ToString();              
            }           
        }
        public static void OnMessageReceived(object sender, MessageReceivedEventArgs e)
        {
            try
            {
                if (e == null)
                    return;
                if (e.CmsData == null)
                {
                    e.CmsData.Skill.AgentsAvailable.ToString();
                }
               // if (!String.IsNullOrEmpty(e.Message))
               //     Console.WriteLine(e.Message);
            }
            catch (Exception ex)
            {
                //    logger.Error(" Exception " + ex);
                //    throw ex;
            }
        }

Edit

改变: DisplayNumber.Text =e.CmsData.Skill.AgentsAvailable.ToString();自: Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() => { DisplayNumber.Text = e.CmsData.Skill.AgentsAvailable.ToString() ; }

这将处理多线程调用。您可能必须为 DispatcherPriority 枚举添加使用 System.Threading 语句

结束编辑

目前尚不清楚如何从类型 FeedServiceAgentdata获取到 Loaded 事件处理程序中的 Skill.AgentsAvailable 属性。我们需要有关如何进行导航的更多信息。在Loaded处理程序中是否需要分配?我已经在下面的代码中标记了位置。

我还对消息处理程序方法进行了必要的更改。

public void TextBlock_Loaded(object sender, EventArgs e)
    {                        
        using (var data = new FeedServiceAgent())
        {
            data.MessageReceived += OnMessageReceived;             
            data.Subscribe("92", 3);
            //DisplayNumber.Text = data.ToString();
            //Is this assignment even necessary?
            DisplayNumber.Text = /*Still unclear what goes here because we don't know what how to get from `data` to `Skill`*/            
        }           
    }
    public static void OnMessageReceived(object sender, MessageReceivedEventArgs e)
    {
        try
        {
            if (e == null)
                return;
            if (e.CmsData == null)
            {
                //e.CmsData.Skill.AgentsAvailable.ToString();
                Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() => { DisplayNumber.Text = e.CmsData.Skill.AgentsAvailable.ToString() ; }));
            }
           // if (!String.IsNullOrEmpty(e.Message))
           //     Console.WriteLine(e.Message);
        }
        catch (Exception ex)
        {
            //    logger.Error(" Exception " + ex);
            //    throw ex;
        }
    }

最新更新