首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用KNX.Net以编程方式更新事件后的映像

使用KNX.Net以编程方式更新事件后的映像
EN

Stack Overflow用户
提问于 2019-05-08 21:50:30
回答 1查看 37关注 0票数 0

我正在创建一个网络应用程序来控制我房子里的一些灯。我不明白为什么在触发事件void之后,图像没有更新;而如果我从一个按钮上触发它,它实际上是在变化。

到目前为止,我已经使用KNX.Net库进行了尝试

..。

代码语言:javascript
复制
    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";
        }

    }

..。

而如果我像这样启动它,图像确实会发生变化

..。

代码语言:javascript
复制
     private void CH01LightOn()
    {
        _connection.Action(CH01LightOnOffAddress, true);

        Thread.Sleep(500);

        if (condition == "1")
        {
            Image1.ImageUrl = @"\Res\Call.png";
        }
        else
        {
            Image1.ImageUrl = @"\Res\Bomb.png";
        }

    }

..。

我只需要在事件被触发后图像发生变化。提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2019-08-24 13:30:35

这可能是线程问题。如果未在UI线程上调用该事件方法,则不能直接访问WinForms控件,而必须使用Control.Invoke

要尝试此操作,请将Image1.ImageUrl = @"\Res\Call.png"替换为:

代码语言:javascript
复制
if (Image1.InvokeRequired)
{
    Image1.Invoke((Action)(() => Image1.ImageUrl = @"\Res\Call.png"));
}
else
{
    Image1.ImageUrl = @"\Res\Call.png"
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56042361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档