有没有一些快捷方式可以调用它.每次回调需要访问 UI 时调用?对 UI 线程的一些自动委派



我正在开发一个 Windows 窗体 GUI,其设计模式是 MVP 和 MVVM 的组合。

我使用代码将视图绑定到视图模型:视图订阅 VM 的PropertyChanged事件。如果表示器设置 VM 的某些属性,则会引发事件,并且视图将执行其回调。

所以视图中的每个回调都需要用this.Invoke( { ... } )包装。

我希望有一种方法可以定义一个属性,其 setter 将在 UI 线程中自动调用。编写自动委派属性或方法的某种方法。

我也用 WPF 标记了这个问题,因为我使用的是 C# 4.0,所以如果 WPF 中存在这样的机制,我很乐意将其用于 Windows 窗体。

*我使用的是 MVVM,因为应用程序可能会在某个阶段转换为 WPF。

我突然意识到我正在使用的IoC框架Castle Windsor可以给我提供这一点。我刚刚将一个拦截器附加到表单的所有方法,拦截器是这样做的:

if (invocation.InvocationTarget.InvokeRequired)
{
     invocation.InvocationTarget.Invoke(invocation.Proceed);
}
else
{
     invocation.Proceed();
}

后来我修改了上面的代码,将其放入具有以下签名的扩展方法中:

public void InvokeIfRequired(this Control uiObject, Action action)

若要定义始终在 UI 线程上调用的属性资源库,可以执行以下操作:

public int MyPropertyForTheUIThread
{
    get
    {
        return this.myRealValue;
    }
    set
    {
        if (this.myRealValue != value)
        {
            this.myRealValue = value;
            this.Invoke((Action)(()=>
                {
                    // The stuff I want to do on the UI thread when this property changes.
                });
        }
    }
}

最新更新