“交叉线程操作无效”的行为

时间:2012-07-20 08:03:42

标签: c# task-parallel-library multithreading

我试图从GUI中读取值,并使用Task传递了如下所示的数据。我不明白是因为只有组合框字段(即tab3_ddl_Range.SelectedText)才会出错,如果我将其删除,则错误就会消失。它不应该仍然给出错误吗?当我从非GUI线程访问GUI时?

factoryA.StartNew(() => ReadInstrument_3(
    Globls.numReadings, tab3_txt_Address.Text.TrimEnd(), tab3_rb_DCI.Checked,
    tab2_rb_DCV.Checked, tab3_ddl_Range.SelectedText.TrimEnd(),
    tab3_rb_FixedZ_10G.Checked, tab3_rb_FixedZ_10M.Checked,
    tab3_rb_Azero_Off.Checked, tab3_rb_Azero_On.Checked,
    tab3_rb_Azero_Once.Checked, tab3_txt_Aper.Text.TrimEnd(),
    tab3_txt_Device_Timeout.Text.TrimEnd(), tab3_txt_SICL.Text.TrimEnd())

1 个答案:

答案 0 :(得分:3)

控件的某些属性已缓存,并且不需要使用winapi调用来检索其值。特别是Text属性存储在内部字符串中。因此,读取线程中的Text属性不会引发异常,因为它只返回字符串值。但是要编写,这需要更新字符串进行winapi调用以更新本机窗口。

触发异常的是winapi调用。特别是,访问Handle属性。