wpf用户控件清理

时间:2013-01-09 14:03:57

标签: c# wpf user-controls

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

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

我们遇到的问题是,当UserControl关闭时,没有任何资源被释放回系统。后台工作者和显示UserControl所需的资源。我用google搜索强制关闭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这样的方法调用,它也会释放资源吗?

还有一种方法可以使用同样的方法来关闭我的后台工作者吗?

1 个答案:

答案 0 :(得分:0)

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

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

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