首页 / C# / C#LIifxNet切换光功率,LIFX
C#LIifxNet切换光功率,LIFX
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#LIifxNet切换光功率,LIFX,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1519字,纯文字阅读大概需要3分钟。
内容图文
![C#LIifxNet切换光功率,LIFX](/upload/InfoBanner/zyjiaocheng/774/1de02c028421478eb9a904e1f4d334f7.jpg)
我使用dotMorten命名为LifxNet的nuget包.我可以改变灯泡的颜色并打开和关闭它.我现在想要一个能够切换灯泡功率的按钮.我正在尝试使用方法GetLightStateAsync()来检查灯是打开还是关闭.
private void btnPower_Click(object sender, RoutedEventArgs e)
{
var powerState = client.GetLightStateAsync(selectedLight).Result.IsOn;
if (powerState == false)
{
client.SetDevicePowerStateAsync(selectedLight, true);
}
if (powerState == true)
{
client.SetDevicePowerStateAsync(selectedLight, false);
}
}
当我运行此代码时,整个应用程序挂起.当我暂停代码时它会告诉我它的代码行是:
var powerState = client.GetLightStateAsync(selectedLight).Result.IsOn;
我尝试以不同的方式运行它,并且当你将.Result添加到代码时我发现它会挂起.如果删除.Result.IsOn并注释掉if语句,那么程序将运行正常.
我无法弄清楚出了什么问题,我将不胜感激.
解决方法:
您尝试调用的方法是异步的.使用Result调用它将导致在Task未完成时执行阻塞操作.
您可以尝试调用var powerState = client.GetLightStateAsync(selectedLight).Result.IsOn;
这样:var lightState = await client.GetLightStateAsync(selectedLight);然后是lightState.IsOn.
您可以查看this question以了解等待任务< T>之间的区别.和任务< T> .Result.
您可以尝试使用这段代码来查看它是否可以解决您的问题.我使事件处理程序异步,因此您可以等待GetLightStateAsync(selectedLight),这将导致非阻塞调用.
private async void btnPower_Click(object sender, RoutedEventArgs e)
{
var powerState = await client.GetLightStateAsync(selectedLight);
if (!powerState)
{
await client.SetDevicePowerStateAsync(selectedLight, true);
}
else
{
await client.SetDevicePowerStateAsync(selectedLight, false);
}
}
内容总结
以上是互联网集市为您收集整理的C#LIifxNet切换光功率,LIFX全部内容,希望文章能够帮你解决C#LIifxNet切换光功率,LIFX所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。