Tag: .net 4.0

C#GUI线程错误

我正在开发一个应该通过套接字接口接收命令然后在GUI中执行它们的应用程序。 此应用程序正在C#.NET 4.0中开发,它使用WPF作为其GUI。 套接字接口有一个工作线程,它继续监听套接字并处理其命令,因此,如果收到Show Popup命令,则工作线程调用一个管理器类,负责创建弹出窗口并在主屏幕上显示它。 创建弹出窗口然后调用主屏幕的管理器方法如下: public void ProcessPopup(PopupModel model) { switch (model.ScreenType) { case Screens.Type1: popup = new PopupType1(); break; case Screens.Type2: popup = new PopupType2(); break; case Screens.Type3: popup = new PopupType3(); break; case Screens.Type4: popup = new PopupType4(); break; } viewModel.SetModel(model); if (!Dispatcher.CurrentDispatcher.Equals(App.Current.Dispatcher)) { App.Current.Dispatcher.Invoke((ThreadStart)delegate { mainScreen.ShowPopup(popup); }); } else { mainScreen.ShowPopup(popup); […]

ConcurrentDictionary似乎在删除时不标记GC的元素

我惊讶地发现我的应用程序内存占用不断增长 – 运行的时间越长,消耗的内存就越多。 因此,通过windbg一些魔力,我根据ConcurrentDictionary向我的小LRU缓存指出了一个问题。 CD有很多好处,对我来说非常酷(其中一个是它的数据永远不会在LOH中结束)。 TryRemove和TryRemove是用于添加和逐出项目的两种方法。 一些旧元素的!gcroot引导我回到我的缓存。 ILSpy的一些调查让我得出了这样的结论: TryRemove并没有真正删除元素。 它只是改变链表指针以跳过从不将数组元素的值赋值为null 。 这可以防止GC收集旧的被驱逐的对象。 真? 这是一个已知的问题吗? 如果是这样,我唯一的选择是TryUpdate(key, null) ,然后是TryRemove(key) ? 如果是这样,那么我必须锁定ConcurrentDictionary访问,这是矛盾的。 这是ILSpy转储: // System.Collections.Concurrent.ConcurrentDictionary private bool TryRemoveInternal(TKey key, out TValue value, bool matchValue, TValue oldValue) { while (true) { ConcurrentDictionary.Tables tables = this.m_tables; int num; int num2; this.GetBucketAndLockNo(this.m_comparer.GetHashCode(key), out num, out num2, tables.m_buckets.Length, tables.m_locks.Length); lock (tables.m_locks[num2]) { […]

Dropdownlist数据源并从C#添加额外的项目

我有一个与aspx页面中的DataSource相关联的DropDownList 。 我需要在加载页面时再添加一个项目。 我的代码: 而我正在尝试额外的项目: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ddlVisualTemplate.Items.Add(new ListItem(“None”, string.Empty)); } } 如果我调试代码,它会通过它。 但是当显示页面时,下拉列表不包含”None” 。

IPAddress。 Parse解析192.168到192.0.0.168

我有以下情况: IPAddress ip; IPAddress.TryParse(“192.168”, out ip); if(ip == null){//do something with IP} 我希望解析失败,而不是解析为“192.0.0.168”。 我在这里想念的是什么? (IPAddress.Parse的工作原理相同)

in .Net 4:PInvokeStackImbalanceexception

我在.Net 3.5项目中使用了msvcrt.dll中的strlen函数。 进一步来说: private unsafe static extern int strlen( byte *pByte ); 迁移到.NET 4.0后,如果我使用此函数,则会抛出PInvokeStackImbalanceexception。 如何导入.NET 3.5 msvcrt.dll或修复此exception?

将二维整数存储为独立类中的Readonly / const,同时保持不暴露

这是我用这个地方作为我的“去”以获得关于什么有效/无效/为什么等的一般意见的第一个问题。 那么让我们试试吧…… 凭借我有限的经验,我一直在努力探索创建固定数据字段的更好方法,我可以在整个程序中参考这些字段 – 例如我反复显示的最终用户可查看字符串以及其他参数。我希望保持不变并保持安全。 我将我的重用数据保存在单独的静态类中,并将我的字符串放在private static readonly数组中,我通过使用包含在私有ILists中的公开来获取公共getter返回我所追求的单个字符串。 希望到目前为止我还没有滥用术语! 到目前为止我做了什么: namespace MyNamespace { public static partial class Tables { private static readonly string[] _Messages = { “One”, “Two” }; private static readonly IList MessagesReadOnly = Array.AsReadOnly(_Messages); public static IList Messages { get { return MessagesReadOnly; } } } } 我理解的很多,但现在我有一个二维数据表( int ),我需要以一种类似的非暴露方式存储,我可以访问。 这个数据正在进入它自己的类,因为现在我正在处理一个单独的真实数据类型。 实际情况 – […]

使用reflection从元数据类中获取属性属性

我有一个名为Project的LINQ生成类。 我想为生成的属性添加一些属性,因此我使用MetadataType属性定义了一个部分类。 [MetadataType(typeof(Project_HiddenProps))] public partial class Project : IProject { // There are also a few additional properties defined here. } public class Project_HiddenProps { [HiddenColumn] public System.Guid Id { get; set; } // Id is an auto-generated property that I’ve added a custom attribute to } 后来,我使用reflection来尝试获取此属性的属性。 var customAttributes = prop.GetCustomAttributes(false); 但是,我只获得了System.Data.Linq.Mapping.ColumnAttribute类型的一个属性。 我的HiddenColumn属性未包含在集合中。 我的问题是如何使用reflection来获取这些元数据属性。 […]

获取仅在程序集中定义的类型

可能重复: 调用Assembly.GetTypes()时如何防止ReflectionTypeLoadException 我想获得一个程序集中的所有类型。 但是,我收到以下错误: System.Reflection.ReflectionTypeLoadException:无法加载一个或多个请求的类型。 问题是我得到类型的程序集是引用另一个程序集,它只在生产环境中可用,而不是在unit testing环境中。 那么,有没有什么方法可以过滤GetTypes或类似的东西只返回程序集中实际定义的类型而不是类型加载exception? 例如替换 .Assembly.GetTypes().Where(t => t.Namespace.Equals(…

将匿名类型转换为DataTable

将匿名类型转换为DataTable的最快方法是什么? 更新:我想从匿名类型获取并填充DataTable。 如果reflection是必要的,我怎么能用reflection来做呢?

WCF messageheader与messagebodymember?

我不明白何时应该放[MessageHeader]而不是[MessageBodyMember]? 我已经读过它已经习惯了像Soap这样的协议,但是,它到底有什么变化?