2013-01-09 123 views
0

我有一个使用WPF和UserControl编码的应用程序。我已将父窗口与程序启动时加载的用户控制选项卡链接在一起。wpf用户控件清理

从那里我可以选择一个标签,它将打开相应的UserControl。一些用户控件具有后台工作者,其中一些纯粹用于数据捕获,另一些用于数据输出或生成报告。当使用我们创建的名为ClossableItems的类关闭每个选项卡时,它允许您选择关闭按钮以及在我们的MainWindow上显示选项卡。

我们遇到的问题是,当UserControl关闭时,没有任何资源被释放回系统aka。后台工作人员和显示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) 
     { 
     } 

所以基本上我要求如果有知道的一种方式关闭该用户控件从一个方法叫做如的onDestroy,也将释放资源?

还有一种方法,我可以使用这种方法来关闭我的背景工人?

+0

添加事件处理程序并在按下关闭按钮时释放资源。 – chameleon86

+0

我有一个onDestroy事件,每次UserControl关闭时都会调用它,但我试过尽可能的方式释放这些资源,但无济于事。 – fonsIT

+0

感谢编辑Ramhound – fonsIT

回答

0

您需要发信号通知后台工作人员停止工作,后台工作人员需要确保处理信号。信号可以使用各种模式实现,最简单的是:

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

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

+0

我确实有一个'CloseControl'方法,但不幸的是,每次尝试关闭后台工作程序并关闭用户控件以返回资源。也许我应该运行显式收集的垃圾? – fonsIT

+0

最好离开垃圾收集器。问题是:你的后台工作人员有什么不能停止的?你可以用一些源代码编辑你的问题,或者至少描述你正在做什么? –