Tag: .net 4.0

c#中的定时器初始化和竞争条件?

我在Richter的书上看到了这段代码: 下面的代码演示了如何让线程池线程调用立即启动的方法,然后每隔2秒调用一次: /*1*/ internal static class TimerDemo /*2*/ { /*3*/ private static Timer s_timer; /*4*/ public static void Main() /*5*/ { /*6*/ Console.WriteLine(“Checking status every 2 seconds”); /*7*/ // Create the Timer ensuring that it never fires. This ensures that /*8*/ // s_timer refers to it BEFORE Status is invoked by a thread pool thread […]

使用嵌套的Parallel.For

考虑这个例子: var x = 0; for (var i = 0; i < 100; i++ ) { for (var a = i+1; a < 100; a++) x += 1; } 打印x时,我们总是得到4950.如果我要将其并行化怎么办? 这就是我想出的 Parallel.For(0, 100, i => Parallel.For(i + 1, 100, a => { x += 1; })); 但是,每次运行时都不打印4950。 为什么?

将整数数组转换为枚举数组

我有一个有4个值的枚举: public enum DriveRates { driveSidereal = 0, driveLunar = 1, driveSolar = 2, driveKing = 3 } 我有一个值数组,我想要转换为DriveRates数组。 但是当我做var rates = (DriveRates[])ret; , ret是一个数字对象数组(可能是整数),它表示Unable to cast object of type ‘System.Object[]’ to type ‘ASCOM.DeviceInterface.DriveRates[]’. ret = {0,1,2,3} 。 我应该怎么做呢。 再次,我试图将枚举值数组转换为枚举数组……好吧,值:)但我正在尝试从类型object[]转换为类型DriveRates[] 。

在进行异步WCF调用时,首选哪种方式?

当异步调用WCF服务时,似乎有两种方法可以完成。 1。 WcfClient _client = new WcfClient(); public void One() { _client.BegindoSearch(“input”, ResultOne, null); } private void ResultOne(IAsyncResult ar) { string data = _client.EnddoSearch(ar); } 2。 public void Two() { WcfClient client = new WcfClient(); client.doSearchCompleted += TwoCompleted; client.doSearchAsync(“input”); } void TwoCompleted(object sender, doSearchCompletedEventArgs e) { string data = e.Result; } 使用新的Task类,我们可以通过在同步中包装同步操作来轻松实现第三种方法。 3。 public void […]

如何测试typeof(动态)?

我有一个generics方法TResult Foo(IEnumerable source)如果TResult被声明为dynamic我想要执行与其他类型声明不同的代码路径。 对于常规类型,您可以执行以下操作: if (typeof(TResult) == typeof(int)) return ExpressionFactory.CreateExpandoFunction(); 但是if (typeof(TResult) == typeof(dynamic))不能编译。 无论如何,在使用声明调用方法时,在运行时进行此类确定: dyanmic x = Foo(list); 由于动态本身不是一种类型,我应该测试什么? IDynamicMetaObjectProvider ? 编辑这是System.Linq.Expression评估程序的SQL文本的一部分。 如果TResult是动态的,那么分支的特定愿望是某些伪逻辑看起来像这样: if (type is struct) create selector that initializes each element to result values else if (type is class) create selector that initialize each element to new instance and set member properties […]

问题x:TypeArguments和XAML中的genericsList类

我为松散的XAML文件创建了以下标记。 HelloWorld 但是当我在IE中运行松散的XAML时,我收到此错误: XML命名空间’clr-namespace:System.Collections.Generic; assembly = mscorlib’中不存在标记’List’。 线’7’位置2’。 正如您所知,XAML中的generics是XAML 2009中的一个特性,并且只能在松散的XAML文件中工作。 但上面的代码不起作用。 任何线索为什么会发生此错误以及如何纠正问题? 提前致谢。

干净地中断HttpListener的BeginGetContext方法

我正在使用HttpListener并使用BeginGetContext来获取我的上下文对象。 我想干净地关闭我的HttpListener但是如果我尝试在侦听器上执行Close操作,我会得到一个exception,它会导致我的程序退出。 using System; using System.Net; namespace Sandbox_Console { class Program { public static void Main() { if (!HttpListener.IsSupported) { Console.WriteLine(“Windows XP SP2 or Server 2003 is required to use the HttpListener class.”); return; } // Create a listener. HttpListener listener = new HttpListener(); listener.Prefixes.Add(“http://vwdev.vw.local:8081/BitsTest/”); listener.Start(); Console.WriteLine(“Listening…”); listener.BeginGetContext(Context, listener); Console.ReadLine(); listener.Close(); //Exception on this line, […]

Microsoft ReportViewer Web控件需要ScriptManager

我正在尝试以编程方式在IHttpHandler上下文中的自定义页面内呈现报表查看器 ReportViewer rv = new ReportViewer(); ReportDataSource rds = new ReportDataSource(); rds.Name = “Report”; rv.LocalReport.ReportPath = “Report.rdlc”; rds.Value = SomeReportObject; rv.LocalReport.DataSources.Add(rds); rv.LocalReport.Refresh(); ScriptManager scriptHandler = new ScriptManager(); MyPage p = new MyPage(); p.Controls.Add(scriptHandler); p.Controls.Add(rv); using (TextWriter myTextWriter = new StringWriter()) { using (HtmlTextWriter myWriter = new HtmlTextWriter(myTextWriter)) { p.RenderControl(myWriter); } } 虽然我已将ScriptManager添加到页面但运行时抱怨ReportViewer需要一个,但它会在p.RenderControl(myWriter)行引发以下exception 报表查看器Web控件需要Web表单上的System.Web.UI.ScriptManager。 这是MyPage类 public […]

Parallel.For和Break()误会?

我正在研究For循环中的Parallelism Break。 阅读本文后 ,我仍然有一个问题: 我希望这段代码: Parallel.For(0, 10, (i,state) => { Console.WriteLine(i); if (i == 5) state.Break(); } 最多产生 6个数字(0..6)。 他不仅没有这样做,而且结果长度不同: 02351486 013542 0135642 很烦人。 (这里的地狱是Break(){5之后}这里??) 所以我看了msdn Break可以用于与循环通信,在当前迭代之后不需要运行其他迭代。 如果从for循环的第100次迭代调用Break从0到1000并行迭代,则仍应运行小于100的所有迭代,但不需要从101到1000的迭代。 问题#1: 哪个迭代? 整个迭代计数器? 还是每个线程? 我很确定这是每个post。 请批准。 问题2 : 让我们假设我们使用并行+范围分区(由于元素之间没有cpu成本变化),因此它在线程之间划分数据。 所以如果我们有4个核心(并且它们之间有完美的划分): core #1 got 0..250 core #2 got 251..500 core #3 got 501..750 core #4 got 751..1000 所以core […]

.NET 4的条件编译

可能重复: C#条件编译和框架目标 我有一些代码可以在.NET 4中运行但在.NET 3.5中不起作用,在.NET 3.5中它需要使用对Windows的互操作调用。 我想使用“ifdef”在两种情况下使用不同的代码路径(最终我将弃用.NET 3.5代码)。 是否有预定义的指令值来确定何时使用.NET4编译代码? 是否有与所有预定义指令(DEBUG,TRACE,…)的良好链接? 以下链接仅提供指令,但不提供标准预定义值: http://msdn.microsoft.com/en-us/library/ed8yd1ha(v=VS.100).aspx