【问题标题】:wpf user control clean upwpf用户控件清理
【发布时间】:2013-01-09 14:03:57
【问题描述】:

我有一个使用 WPF 和 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)
        {
        }

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

还有没有一种方法可以让我使用同样的方法来关闭我的后台 Worker?

【问题讨论】:

  • 添加一个事件处理程序并在按下关闭按钮时释放您的资源。
  • 我有一个 onDestroy 事件,每次关闭 UserControl 时都会调用它,但我已经尝试了所有可能的方法来释放这些资源,但无济于事。
  • 感谢编辑 Ramhound
  • 尝试检查 DoWork 事件处理程序中 DoWorkEventArgs 对象的 Cancel 属性,如果为真则返回。

标签: c# wpf user-controls


【解决方案1】:

您需要向后台工作人员发出停止信号,并且后台工作人员需要确保它负责处理信号。可以使用各种模式来实现信令,最简单的是:

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

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

【讨论】:

  • 我确实有一个CloseControl 方法,但不幸的是每次尝试关闭后台工作人员并关闭用户控件以返回资源。也许我应该明确运行收集的垃圾?
  • 最好不要管垃圾收集器。问题是:您的后台工作人员中有什么不会停止?你能用一些源代码或至少描述你在做什么来编辑你的问题吗?
猜你喜欢
  • 2010-12-05
  • 2010-10-04
  • 2012-06-27
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
  • 2016-09-27
相关资源
最近更新 更多