我正在尝试在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;
}
}
答案 0 :(得分:1)
修改强>
更改:
DisplayNumber.Text =e.CmsData.Skill.AgentsAvailable.ToString();
至:
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() => { DisplayNumber.Text = e.CmsData.Skill.AgentsAvailable.ToString() ; }
这将处理多线程调用。您可能必须为DispatcherPriority
枚举
<强> 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;
}
}