Обновление программного изображения после события с KNX.Net
Я создаю веб-приложение для управления некоторыми огнями в моем доме. Я не могу понять, почему после запуска Event void изображение не обновляется; в то время как если я запускаю его с кнопки, он на самом деле меняется.
Я пробовал это до сих пор, используя библиотеки KNX.Net
...
public void Event(string address, string state)
{
if (address.Equals(CH03LightOnOffAddressStatus) || address.Equals(CH04LightOnOffAddressStatus))
{
System.Diagnostics.Debug.WriteLine("New Event: device " + address + " has status (" + state + ") --> " + _connection.FromDataPoint("9.001", state));
}
else if (
address.Equals(CH01LightOnOffAddressStatus) ||
address.Equals(CH02LightOnOffAddressStatus)
)
{
var data = string.Empty;
if (state.Length == 1)
{
data = ((byte)state[0]).ToString();
}
else
{
var bytes = new byte[state.Length];
for (var i = 0; i < state.Length; i++)
{
bytes[i] = Convert.ToByte(state[i]);
}
data = state.Aggregate(data, (current, t) => current + t.ToString());
}
System.Diagnostics.Debug.WriteLine("New Event: device " + address + " has status --> " + data);
condition = data;
nowAddress = address;
}
if (condition == "1")
{
Image1.ImageUrl = @"\Res\Call.png";
}
else
{
Image1.ImageUrl = @"\Res\Bomb.png";
}
}
...
В то время как, если я запускаю это так, изображение действительно меняется
...
private void CH01LightOn()
{
_connection.Action(CH01LightOnOffAddress, true);
Thread.Sleep(500);
if (condition == "1")
{
Image1.ImageUrl = @"\Res\Call.png";
}
else
{
Image1.ImageUrl = @"\Res\Bomb.png";
}
}
...
Мне просто нужно, чтобы изображения менялись после запуска мероприятия. Заранее спасибо.
0 ответов
Вероятно, это проблема с потоками. Если метод Event не вызывается в потоке пользовательского интерфейса, вы не можете напрямую получить доступ к элементам управления WinForms, но должны использоватьControl.Invoke
.
Чтобы попробовать это, замените Image1.ImageUrl = @"\Res\Call.png"
по:
if (Image1.InvokeRequired)
{
Image1.Invoke((Action)(() => Image1.ImageUrl = @"\Res\Call.png"));
}
else
{
Image1.ImageUrl = @"\Res\Call.png"
}