我有一个属性返回一个单选框组的选定项。
public string P1 { get => CB.SelectedItem as string; }
它用于在类的构造函数中调用的异步函数中。
async Task F() {
var b = P1?.Equals(".........", StringComparison.InvariantCultureIgnoreCase) ?? false;
var t1 = callAsync().ContinueWith(x => {
if (b) { .../* use x*/... }
});
await t2;
await t1; //...
代码工作正常。但是,b在很多地方都使用了,所以我为它创建了一个属性并删除了局部变量var b = P1?Equals(....。
bool b => P1?.Equals(".........", StringComparison.InvariantCultureIgnoreCase) ?? false;
async Task F() {
var t1 = callAsync().ContinueWith(x => {
if (b) { .../* use x*/... } // Exception if F() is called in constructor
});
await t2;
await t1; //...
现在访问时出现以下错误CB.SelectedItem?
跨线程操作无效:控件“CB”从创建它的线程以外的线程访问。
更新: 如果不是从构造函数调用,我发现所有代码都有效。
青春有我
相关分类