从另一个线程读取Checkbox状态
我试图从WPF中的BackgroundWorker中读取复选框的值:
这不起作用:
bool? isSleepChecked = checkBoxSleep.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate{ return checkBoxSleep.IsChecked;});
无法将匿名方法转换为委托类型’System.Threading.ThreadStart’,因为块中的某些返回类型不能隐式转换为委托返回类型
编辑 – 这是HB的答案,使用委托而不是lambda表达,我发现它更具可读性
bool? isSleepChecked = (bool?)checkBoxSleep.Dispatcher.Invoke(new Func(delegate { return checkBoxSleep.IsChecked; }));
改为分配变量,然后您不需要return
。
bool? isSleepChecked; checkBoxSleep.Dispatcher.Invoke(new Action( () => isSleepChecked = checkBoxSleep.IsChecked));
或者,您可以使用具有返回值的委托(例如, Func
):
bool? isSleepChecked = checkBoxSleep.Dispatcher.Invoke(new Func( () => checkBoxSleep.IsChecked));
(在.NET 4.5之前需要返回类型转换)
您的代码将无法编译,因为,当您尝试返回bool?
从您的委托中, ThreadStart
的返回类型为void
。
在这种情况下最简单的方法可能是在lambda表达式中捕获isSleepChecked
变量并直接设置它:
上述就是C#学习教程:从另一个线程读取Checkbox状态分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
bool? isSleepChecked = null; checkBoxSleep.Dispatcher.Invoke(new Action(() => { isSleepChecked = checkBoxSleep.IsChecked; }), DispatcherPriority.Normal);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1007518.html