Tag: .net

我如何使用VIM来做.Net开发

Visual Studio是事实上的编辑器,但是我们还有哪些其他选项可以避免沉重的用户界面,同时仍然与C#构build链集成? 寻找最好直接使用vi或vim选项,以及模拟vi和/或vim部分或全部function的选项。

确保在MVVM WPF应用程序中的UI线程上调用OnPropertyChanged()

在我正在使用MVVM模式编写的WPF应用程序中,我有一个后台进程来完成这件事,但是需要从UI中获取状态更新。 我正在使用MVVM模式,所以我的ViewModel几乎不知道向用户展示模型的视图(UI)。 说我有我的ViewModel中的以下方法: public void backgroundWorker_ReportProgress(object sender, ReportProgressArgs e) { this.Messages.Add(e.Message); OnPropertyChanged("Messages"); } 在我看来,我有一个ListBox绑定到ViewModel的Messages属性( List<string> )。 OnPropertyChanged通过调用PropertyChangedEventHandler来实现INotifyPropertyChanged接口的angular色。 我需要确保在UI线程上调用OnPropertyChanged – 我该怎么做? 我已经尝试了以下内容: public Dispatcher Dispatcher { get; set; } public MyViewModel() { this.Dispatcher = Dispatcher.CurrentDispatcher; } 然后将以下内容添加到OnPropertyChanged方法: if (this.Dispatcher != Dispatcher.CurrentDispatcher) { this.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate { OnPropertyChanged(propertyName); })); return; } 但是这不起作用。 有任何想法吗?

为什么.NET中的多行正则expression式不匹配CRLF?

我注意到了以下几点: var b1 = Regex.IsMatch("Line1\nLine2", "Line1$", RegexOptions.Multiline); // true var b2 = Regex.IsMatch("Line1\r\nLine2", "Line1$", RegexOptions.Multiline); // false 我很困惑。 RegexOptions的文档说: 多线 :多线模式。 改变^和$的含义,使它们分别匹配任何行的开始和结束,而不仅仅是整个string的开始和结束。 由于C#和VB.NET主要用于Windows世界,所以我猜想.NET应用程序处理的大多数文件使用CRLF换行符( \r\n )而不是LF换行符( \n )。 尽pipe如此,.NET正则expression式parsing器似乎无法将CRLF 换行识别为行尾 。 我知道我可以解决这个问题,例如,通过匹配Line1\r?$ ,但它仍然令我感到奇怪。 这是真正的.NET正则expression式parsing器的预期行为还是我错过了一些隐藏的UseWindowsLinebreaks选项?

比较Double.NaN和自己

我被困在试图找出为什么这两个操作返回不同的值: Double.NaN == Double.NaN返回false Double.NaN.Equals(Double.NaN)返回true 我有第一部分的答案 ,但不是第二部分,而不是“为什么这两个比较返回不同的值”

我如何parsing和转换DateTime的RFC 3339date时间格式?

如何将DateTime结构转换为其等效的RFC 3339格式的string表示forms和/或将此string表示formsparsing为DateTime结构? RFC-3339date – 时间格式用于许多规范,如Atom Syndication Format 。

为什么.net中的数组只能实现IEnumerable而不是IEnumerable <T>?

我正在实现自己的ArrayList类,当我意识到这一点时,感到很惊讶 public System.Collections.Generic.IEnumerator<T> GetEnumerator() { return _array.GetEnumerator(); } 没有工作。 什么原因数组不在IE中实现IEnumerator? 有没有解决办法? 谢谢

Microsoft代码合同和CI构build服务器

我们正在迁移到.NET 4,并对实施新的Design By Contractfunction非常感兴趣。 正如我们所知, Code Contract引擎需要安装Code Contract插件 和VS Ultimate或Premium(用于静态检查)。 这是我的问题: 我可以使用代码合同重写而不在CI构build服务器(TeamCity)上安装VS? 有没有任何msbuild任务来执行合同检查? 您是否使用代码合同对CI构build进行validation?

限制通过并行任务库运行的活动任务数量的最佳方法

考虑一个拥有大量需要处理的作业的队列。 队列的限制是一次只能得到1份工作,无法知道有多less工作。 这些工作需要10秒才能完成,并且涉及很多等待Web服务的响应,因此不受CPU限制。 如果我使用这样的东西 while (true) { var job = Queue.PopJob(); if (job == null) break; Task.Factory.StartNew(job.Execute); } 然后,它会激烈地从队列中挤出工作,比完成工作快得多,耗尽内存并落在它的屁股上。 > < 我不能使用(我不认为) ParallelOptions.MaxDegreeOfParallelism,因为我不能使用Parallel.Invoke或Parallel.ForEach 我find了3个替代品 用TaskreplaceTask.Factory.StartNew Task task = new Task(job.Execute,TaskCreationOptions.LongRunning) task.Start(); 这似乎有点解决问题,但我不清楚这是怎么回事 ,如果这是最好的方法。 创build一个限制并发度的自定义任务计划程序 使用像BlockingCollection这样的东西,在开始时将作业添加到集合,并在完成时移除以限制可以运行的数字。 #1我必须相信自动做出正确的决定,#2 /#3我必须计算出可以运行的最大数量的任务。 我是否正确地理解了这一点 – 哪一个更好,或者有另一种方法? 编辑 – 这是我从下面的答案,生产者 – 消费者模式。 除了整体吞吐量的目的不是让工作更快地出队比可以处理,并没有多个线程轮询队列(这里没有显示,但这是一个非阻塞操作,并将导致巨大的交易成本,如果从多个地方高频调查) 。 // BlockingCollection<>(1) will block if try to add […]

为什么IIS线程与常规CLR线程相比如此珍贵?

我正在阅读关于 ASP.NET MVC中的AsyncControllers 。 看起来,它们存在的唯一原因是IIS线程可以被保存,而长时间运行的工作被委托给常规的CLR线程,似乎更便宜。 我在这里有几个问题: 为什么这些IIS线程如此昂贵,无法certificate为支持asynchronous控制器而构build的整个体系结构? 我如何知道/configuration在IIS应用程序池中运行多less个IIS线程?

在Bootstrapper中configurationAutomapper违反开放原则?

我在Bootstrapper中configuration了Automapper,我在Application_Start()调用了Bootstrap() ,而且我被告知这是错误的,因为每次我必须添加一个新映射时,必须修改Bootstrapper类,所以我我违反了开放原则。 你怎么看,我真的违反这个原则吗? public static class Bootstrapper { public static void BootStrap() { ModelBinders.Binders.DefaultBinder = new MyModelBinder(); InputBuilder.BootStrap(); ConfigureAutoMapper(); } public static void ConfigureAutoMapper() { Mapper.CreateMap<User, UserDisplay>() .ForMember(o => o.UserRolesDescription, opt => opt.ResolveUsing<RoleValueResolver>()); Mapper.CreateMap<Organisation, OrganisationDisplay>(); Mapper.CreateMap<Organisation, OrganisationOpenDisplay>(); Mapper.CreateMap<OrganisationAddress, OrganisationAddressDisplay>(); } }