【发布时间】:2016-01-21 23:13:35
【问题描述】:
由于 here 记录的 UI 自动化框架,我在 Silverlight 中遇到了内存泄漏问题
我们实现自定义控件库(继承基本 Silverlight 控件并扩展其功能的控件)。例如
<local:BaseControl x:Name="DropDownControl" x:Class="xxx.xxx.Views.DropDown"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local ="clr-namespace:xxx.CustomControls.Views"
mc:Ignorable="d"
d:DesignHeight="23" d:DesignWidth="120" Background="#FF1F3B53">
<Border x:Name="bdrMain" BorderThickness="1" BorderBrush="Transparent">
<Grid x:Name="LayoutRoot">
<ComboBox x:Name="ddlMainControl" Canvas.ZIndex="1"/>
</Grid>
</Border>
我可以通过覆盖类本身的 OnCreateAutomationPeer 方法来禁用自定义控件本身的自动化。
protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer()
{
return null;
}
但是,组合框本身仍必须响应自动化提供程序对其自动化对等方的请求,因为我仍然可以看到它在 WinDBG 中泄漏。在这种情况下如何禁用组合框的自动化有什么想法吗?
附: - 我知道您通过设置无窗口参数 = true 禁用自动化应用程序范围,但它是一个成熟的应用程序,我不希望更改任何可能增加风险的应用程序范围
【问题讨论】:
标签: c# wpf silverlight memory-leaks combobox