Prism InteractionRequest导致内存泄漏

时间:2018-07-04 09:36:23

标签: c# wpf garbage-collection clr prism

我正在使用Prism InteractionRequest关闭视图。 这是window.xaml中的xaml代码示例:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
    xmlns:prism="http://prismlibrary.com/" 
<i:Interaction.Triggers>
    <prism:InteractionRequestTrigger SourceObject="{Binding CloseRequest}" >
        <ei:CallMethodAction MethodName="Close" TargetObject="{Binding ElementName=window}" />
    </prism:InteractionRequestTrigger>
</i:Interaction.Triggers>

这是视图模型中的c#代码。

    public InteractionRequest<Notification> CloseRequest { get; private set;} = new InteractionRequest<Notification>();
    private DelegateCommand _closeCommand;
    public DelegateCommand CloseCommand => _closeCommand ??
        (_closefirmCommand = new DelegateCommand(
            () => {
                DialogResult = true;
                CloseRequest.Raise(new Notification());
                //CloseRequest = null

            }
        ));

请注意,窗口不是应用程序的MainWindow,糟糕的是,窗口和视图模型将不会被垃圾收集:)关闭窗口并强制GC收集之后,这些对象将在收集时被收集。而且只有当我关闭MainWindow或将CloseRequest设为null时(请参见ViewModel中的注释代码),我保证MainWindow不会引用这些对象,并且我使用的是Arizona6.3,如果能任何人都可以帮助我:)

0 个答案:

没有答案