Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wpf用户控制清理_C#_Wpf_User Controls - Fatal编程技术网

C# wpf用户控制清理

C# wpf用户控制清理,c#,wpf,user-controls,C#,Wpf,User Controls,我有一个使用WPF和UserControl编码的应用程序。我将父窗口与程序启动时加载的用户控制选项卡链接在一起 从那里我可以选择一个选项卡,它将打开相应的UserControl。有些用户控件有后台工作线程,有些纯粹用于数据捕获,有些用于数据输出或生成报告。使用我们创建的名为ClossableItems的类关闭每个选项卡时,该类允许您选择关闭按钮并在主窗口上显示选项卡 我们遇到的问题是,当UserControl关闭时,没有任何资源被释放回系统。后台工作程序和显示UserControl所需的资源。我

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

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

我们遇到的问题是,当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的方法,这个UserControls是从onDestroy这样的方法调用的,它也会释放资源


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

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

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


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

添加一个事件处理程序,并在按下关闭按钮时释放资源。我有一个onDestroy事件,每次用户控件关闭时都会调用该事件,但我已尝试了所有可能的方法来释放这些资源,但均无效。感谢的编辑RamhoundTry检查取消属性DoWorkEvent handler中的DoWorkEventTargets对象,如果为true则返回。我确实有一个
CloseControl
方法,但不幸的是,每次尝试都会关闭后台工作程序并关闭用户控件以返回资源。也许我应该显式地运行垃圾回收器?最好不要使用垃圾回收器。问题是:你的后台工作程序中有什么东西没有停止?你能用一些源代码或者至少是对你正在做的事情的描述来编辑你的问题吗?