根据文档,过滤的CollectionView的Count应该只是通过过滤器的项目数.鉴于此代码:
List<string> testList = new List<string>();
testList.Add("One");
testList.Add("Two");
testList.Add("Three");
testList.Add("1-One");
testList.Add("1-Two");
testList.Add("1-Three");
CollectionView testView = new CollectionView(testList);
int testCount1 = testView.Count;
testView.Filter = (i) => i.ToString().StartsWith("1-");
int testCount2 = testView.Count;
Run Code Online (Sandbox Code Playgroud)
因此我希望testCount1为6,testCount2为3.但是,两者都是6.如果我手动迭代CollectionView并计算项目,我会得到3,但Count总是返回6.
我试过在CollectionView上调用Refresh,只是为了看看是否会纠正结果,但没有变化.文档错了吗?CollectionView中有错误吗?我做错了什么,我看不到?
我有一个WPF应用程序,我正在尝试使用.Net v4 Visual State Manager设置TextBox样式.具体来说,我试图为MouseOver状态设置Foreground和Background的颜色.
发生的事情是,虽然背景和边界正在完美变化,但前景并非如此.如果我使用的画笔通过StaticResource获得颜色,那么前景根本不会改变.如果我使用的画笔通过DynamicResource获取颜色,那么当我将鼠标悬停在TextBox上时,所有TextBox的前景都会发生变化.显然,要么我做错了,要么我想做的事情根本不可能用VSM(这会令人失望).
以下是我使用的资源:
<Color x:Key="ControlBackgroundColor" R="178" G="178" B="178" A="255" />
<Color x:Key="ControlForegroundColor" R="0" G="0" B="0" A="255" />
<Color x:Key="BorderColor" R="127" G="127" B="127" A="255" />
<Color x:Key="MouseOverControlBackgroundColor" R="0" G="0" B="0" A="255" />
<Color x:Key="MouseOverControlForegroundColor" R="255" G="255" B="255" A="255" />
<Color x:Key="MouseOverBorderColor" R="178" G="178" B="178" A="255" />
<SolidColorBrush PresentationOptions:Freeze="True" x:Key="ControlBackgroundBrush" Color="{DynamicResource ControlBackgroundColor}" />
<SolidColorBrush PresentationOptions:Freeze="True" x:Key="ControlForegroundBrush" Color="{DynamicResource ControlForegroundColor}" />
<SolidColorBrush PresentationOptions:Freeze="True" x:Key="BorderBrush" Color="{DynamicResource BorderColor}" />
<SolidColorBrush PresentationOptions:Freeze="True" x:Key="MouseOverControlBackgroundBrush" Color="{DynamicResource MouseOverControlBackgroundColor}" />
<SolidColorBrush PresentationOptions:Freeze="True" x:Key="MouseOverControlForegroundBrush" Color="{DynamicResource MouseOverControlForegroundColor}" />
<SolidColorBrush …Run Code Online (Sandbox Code Playgroud) 我想更改应用程序查找app.config文件的位置.
我知道我可以使用ConfigurationManager.OpenExeConfiguration()来访问任意配置文件 - 但是,当.Net Framework读取配置文件(例如,对于ConnectionStrings或EventSources)时,它将查看默认位置.我想实际更改整个.Net Framework的位置(当然,对于我的应用程序).
我也知道我可以使用AppDomainSetup来更改app.config的位置以用于新的AppDomain.但是,这不适用于应用程序的主AppDomain.
我也知道我可以覆盖函数Main()并创建一个新的AppDomain,并在新的AppDomain中运行我的应用程序.但是,这有其他副作用 - 例如,Assembly.GetEntryAssembly()将返回空引用.
鉴于.Net中其他所有工作方式,我希望有一些方法来配置我的应用程序的启动环境 - 通过应用程序清单,或者其他一些 - 但我一直无法在这个方向找到一线希望.
任何指针都会有所帮助.
大卫穆林
我有一个在IIS中托管的WCF应用程序(写入C#/.Net 4).随着时间的推移,该过程的Handle Count以或多或少的线性方式增加(在该过程回收之前增加高达30,000).根据SysInternals Process Explorer,该进程拥有的大部分句柄都是类型Thread.但是,根据性能监视器,线程的数量或多或少保持不变(大约40).
显然,我做错了什么并且正在泄漏Thread Handles.但是,我不清楚Thread Handle在这种情况下究竟是什么.我会假设它是一个线程的句柄,但由于线程数保持一致,我不知道句柄数是如何增加的.并且,我想不出任何方法来保持线程的句柄,而线程本身就会消失.此外,我没有明确地创建新线程(我在使用的ThreadPool地方).
显然,我错过了一些东西.但是什么?