gpt4 book ai didi

c# - 将 PropertyChangedCallback 标记为异步是否安全?

转载 作者:太空狗 更新时间:2023-10-30 00:51:04 26 4
gpt4 key购买 nike

我有一个类的依赖属性,我们称它为“SomethingControl”:

public static readonly DependencyProperty SomethingProperty = DependencyProperty.Register("Something", typeof(Something), typeof(SomethingControl), new UIPropertyMetadata(SomethingGotSet));

我已经将传递给 UIPropertyMetadata 构造函数的回调方法定义为异步的:

 private async static void SomethingGotSet(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = (SomethingControl)d;
if (control != null)
{
control.SomeOtherProperty = await AsynchronousMethodCall();
}
}

这样做安全吗?这会导致 UI 线程出现死锁或问题吗?我已经对其进行了测试,它似乎工作正常,但我在 MSDN 文档中找不到任何使用像这样的异步属性回调方法的内容。

最佳答案

从您向我们展示的内容来看,这看起来非常安全。

PropertyChangedCallback 不返回任何内容(无效)。该框架将调用此作为“即发即弃”方法。

因此,您正在调用的东西可能会导致稍后回发到用户界面线程这一事实很好,并且不会直接影响此更改通知流。

如果有多个线程,并且一个线程正在等待另一个线程持有的资源,就会发生死锁,反之亦然。根据 AsynchronousCall 的作用,系统中的某处可能仍然存在死锁,但这不会是由于您的 SomethingSet 实现造成的。

关于c# - 将 PropertyChangedCallback 标记为异步是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29995063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com