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

时间:2017-03-22 00:36:08

标签: c# wpf

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

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

所以我假设我可以在这里做类似的事情。 任何帮助,了解我哪里出错都会很棒。

DisplayNumber是文本框的名称。

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;

            }
        }

1 个答案:

答案 0 :(得分:1)

修改

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

这将处理多线程调用。您可能必须为DispatcherPriority枚举

添加使用System.Threading语句

<强> EndEdit中

目前还不清楚如何从data类型FeedServiceAgent转到Skill.AgentsAvailable事件处理程序中的Loaded属性。我们需要有关如何进行导航的更多信息。甚至在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;

        }
    }