c# – 为什么在MainWindow关闭后不会自动处理和收集WPF窗口?

c# – 为什么在MainWindow关闭后不会自动处理和收集WPF窗口?,第1张

概述我一直想知道这一点,我找到了最好的解决方案.要重现此问题,只需: >在新的WPF应用程序中添加新窗口. >添加以下代码: public MainWindow(){ InitializeComponent(); //add code Window1 w1 = new Window1(); //following is in my actual project 我一直想知道这一点,我找到了最好的解决方案.要重现此问题,只需:

>在新的WPF应用程序中添加新窗口.
>添加以下代码:

public MainWindow(){    InitializeComponent();    //add code    Window1 w1 = new Window1();    //following is in my actual project    DataContext = new AllUserqueryIEsviewmodel(new CommonqueryTestSubWindow());}

>运行并关闭MainWindow.

到那时,我希望应用程序关闭,但我的VS2010似乎仍在运行.那么为什么以及如何解决呢?

——— —————–更新

我想我最好在我的真实项目中表达自己的风景,让你更好地理解我的原因
这个.考虑查询列表和打开查询功能,就像TFS工作项查询一样.
我正在创建一些usercontrol来执行此 *** 作,我们团队中的其他人可以在同一个应用程序中使用.查询列表和打开的查询是单独的用户控件,因此用户(其他程序员)可以将打开的查询放在他们想要的任何地方(ContentControl).
viewmodels:

public class AllVM    {        public AllVM(IOneVMContainer container)        {            OneVMs = new ObservableCollection<OneVM>()           {               new OneVM(container),new OneVM(container)           };        }        public ObservableCollection<OneVM> OneVMs { get; set; }        public OneVM SelectedOneVM { get; set; }        public voID OpenOne()        {            SelectedOneVM.open();        }    }public class OneVM{    IOneVMContainer container;    public OneVM(IOneVMContainer container)    {        this.container = container.NewInstance();    }    //I want to open and close the vIEw from viewmodel    public voID open()    {        container.GetContentCtl().Content = this;        container.Show();    }    public voID Close()    {        container.Close();    }}

要在viewmodel中打开和关闭视图,我创建了这样的界面

//Is it good to use interface?//Maybe a better interface?public interface IOneVMContainer{    IOneVMContainer NewInstance();    voID Show();    voID Close();    ContentControl GetContentCtl();}

使用上面的viewmodels:

//my usercontrol to hold AllVMpublic AllUC(){    InitializeComponent();    DataContext = new AllVM(new  OneContainerWindow());}//implement by other team memberspublic partial class OneContainerWindow : Window,IOneVMContainer{    public OneContainerWindow()    {        InitializeComponent();    }    public IOneVMContainer NewInstance()    {       return new OneContainerWindow();    }    public ContentControl GetContentCtl()    {        return contentCtl1;    }}

所以我想知道在viewmodel中存储一个窗口是不可避免的,这会导致主要问题.我知道你必须有更好的解决方案,请帮忙.

解决方法 只要您的应用程序仍具有实时Window实例,WPF调度程序循环就会一直运行.你的Window1对象.事实上它是不可见的,因为你从来没有调用它的Show()方法,并且你永远不能自己关闭窗口,因为你丢失了对窗口的引用并没有改变那个结果.

很不清楚为什么你会考虑这样做,但一个解决方法是强制调度程序循环在主窗口关闭时退出:

protected overrIDe voID OnClosed(EventArgs e) {        base.OnClosed(e);        Application.Current.dispatcher.InvokeShutdown();    }

还有很多其他的,比如将“w1”作为类的一个字段,这样就可以调用它的Close()方法.或者使它成为一个拥有的窗口,以便它与主窗口同时消失.或者显示它以便用户可以控制应用程序中的窗口.随便挑选.

总结

以上是内存溢出为你收集整理的c# – 为什么在MainWindow关闭后不会自动处理和收集WPF窗口?全部内容,希望文章能够帮你解决c# – 为什么在MainWindow关闭后不会自动处理和收集WPF窗口?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1218728.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存