从另一个线程读取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变量并直接设置它:

 bool? isSleepChecked = null; checkBoxSleep.Dispatcher.Invoke(new Action(() => { isSleepChecked = checkBoxSleep.IsChecked; }), DispatcherPriority.Normal);