我正在尝试使 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 语句
结束编辑
目前尚不清楚如何从类型 FeedServiceAgent
的data
获取到 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;
}
}