在VSTO中使用async / await进行跨线程操作无效

时间:2017-08-09 12:30:21

标签: c# multithreading asynchronous async-await vsto

我正在

  

跨线程操作无效

...错误与下面的代码。我认为async / await会照顾这个,但显然不是。奇怪的是,当我评论public class SampleController { private ObservableList<Model> tableData = FXCollections.observableArrayList(); @FXML private TableView<RowModel> table ; @FXML private TableColumn<Model, String> firstCol ; @FXML private TableColumn<Model, String> secondCol ; @FXML public void initialize() { table.setEditable(false); firstCol.setCellValueFactory(cellData -> cellData.getValue().getName()); secondCol.setCellValueFactory(cellData -> cellData.getValue().getProgress()); table.setItems(tableData); } public void addModel(ChannelFuture sendFileFeture,Model model){ table.getItems().add(model); System.out.println("row model= "+model.getName().get());// it works fine; sendFileFeture.addListener(rowModel); } } 时,错误消失了。想法?

textBoxUser.Enabled = false

1 个答案:

答案 0 :(得分:6)

您的问题可能是由于VSTO没有正确提供SynchronizationContext;这是Office插件系统长期存在的问题。您可以通过检查事件处理程序开头的SynchronizationContext.Current值来验证这一点;如果是null,则问题是由于VSTO。

要解决此问题,您可以在任何async void事件处理程序的开头执行此操作:

SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext());