我正在通过非拥有的 UI 线程获取/检查 UIElement 的类型是不是安全?

Posted

技术标签:

【中文标题】我正在通过非拥有的 UI 线程获取/检查 UIElement 的类型是不是安全?【英文标题】:I am getting/checking type of UIElement through non owning UI thread is it safe?我正在通过非拥有的 UI 线程获取/检查 UIElement 的类型是否安全? 【发布时间】:2019-06-04 21:52:04 【问题描述】:

我有一个自定义 UI 元素。我通过拥有线程以外的线程访问它。我能够获取/检查它的类型(自定义类型)并得到正确的结果。依赖这个结果是否安全? (我知道为了访问/更新它的值,我们必须使用拥有 UI 线程)

例如:

bool result = ((uiElement as CustomType) != null)

【问题讨论】:

检查控件的类型可以安全地在拥有线程之外的线程中完成。也最好写bool result = uiElement is CustumType; 【参考方案1】:

可以在拥有线程之外的线程中安全地检查控件的类型:

bool result = uiElement is CustomType;

如果出于任何原因(您没有在问题中提及),

uiElement 是外部可访问的变量(例如字段或属性), 而uiElement的值可能会被另一个线程改变, 并且您仍然需要在类型检查后访问它,

将类型检查的结果分配给局部变量更安全:

var customElement = uiElement as CustomType;

if (customElement != null)

    // do something with customElement ...

【讨论】:

@Clemens,非常感谢您的编辑。现在清楚多了!

以上是关于我正在通过非拥有的 UI 线程获取/检查 UIElement 的类型是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js - element-ui el-table v-for 丢失最后一项

Vue.js Element-UI el-table:制作复制表进行编辑,可以将数据保存到原表

同步线程 - 没有 UI

如何检查 UI 是不是正在刷新?

iOS 从 XCUIElement 获取 UI 元素

Android 等待 UI 线程