我正在通过非拥有的 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 丢失最后一项