WPF用户控件清理

本文关键字:控件 用户 WPF | 更新日期: 2023-09-27 17:51:10

我有一个使用WPF和UserControl编码的应用程序。我已经链接了一个父窗口与用户控制选项卡一起,当程序启动时加载。

从那里我可以选择一个选项卡,将打开相应的UserControl。一些UserControls有后台工作线程,一些线程纯粹用于数据捕获,另一些用于数据输出或生成报告。当每个选项卡关闭时,使用我们创建的一个叫做ClossableItems的类,它允许你选择关闭按钮,并在主窗口上显示选项卡。

我们遇到的问题是,当UserControl被关闭时,没有任何资源被释放回系统。后台工作器和显示UserControl所需的资源。我已经用谷歌搜索了强制关闭我的UserControl的方法,但无济于事。我尝试过的事情:

Background worker:
bwDataCollector.WorkerSupportsCancellation = true;
bwDataCollector.CancellationPending;
bwDataCollector.CancelAsync();

User Control:
this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted
private void Dispatcher_ShutdownStarted(object sender, EventArgs e)
        {
        }

所以基本上我要问的是,如果有人知道一种方法来关闭这个UserControls从一个方法,如onDestroy调用,也会释放资源?

是否也有一种方法,我可以使用相同的方法来关闭我的后台工人?

WPF用户控件清理

你需要给后台worker发出停止的信号,而后台worker需要确保它会处理好这个信号。可以使用各种模式实现信令,最简单的是:

从包含名为CloseControl的方法的基本控件(或让它们实现接口)派生您拥有的所有用户控件。在CloseControl方法中,设置一个标志,表示后台worker停止。

在关闭包含用户控件的窗口之前,对每个控件调用CloseControl方法。