我使用生成模型的实体框架。它包含一些"静态数据"。我像这样扩展它:
public partial class automaty
{
public bool ConnectionAvailable { get; set; }
}
字段ConnectionAvailable确定设备是否为" pingable"。
在MainWindow中,我有ListView,名为listView,方法是Refresh():
void Refresh()
{
new Thread(delegate()
{
this.Dispatcher.Invoke((Action)(() =>
{
var automats = Controller.Automats;
listView.ItemsSource = automats;
listView.UpdateLayout();
}));
}).Start();
}
每隔30秒调用一次。它工作正常,但我想显示设备状态。所以我创建了一个带有无限循环的线程来ping每个设备:
void PingLoop()
{
while (isInPingLoop)
{
var automats = listView.Items.Cast<automaty>().ToList();
foreach (var automat in automats)
{
if (isInPingLoop == false)
{
return;
}
var connection = Tools.HasConnection(automat.Adres_IP);
automat.ConnectionAvailable = connection;
}
}
}
在视图中,它是绑定的:
<Image Source="{Binding ConnectionAvailable, Converter={StaticResource BoolToYesNoConverter}, ConverterParameter='pack://application:,,,/MachinesManager;component/Images/green-circle.png|pack://application:,,,/MachinesManager;component/Images/red-circle.png'}">
我的问题是状态圈不是令人耳目一新的。我知道PingLoop可以ping通时将ConnectionAvailable字段设置为true,但它不会显示在屏幕上。