C#LIifxNet切换光功率,LIFX

C#LIifxNet切换光功率,LIFX,第1张

概述我使用dotMorten命名为LifxNet的nuget包.我可以改变灯泡的颜色并打开和关闭它.我现在想要一个能够切换灯泡功率的按钮.我正在尝试使用方法GetLightStateAsync()来检查灯是打开还是关闭. private void btnPower_Click(object sender, RoutedEventArgs e){ var powerState = client 我使用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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1229191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存