Tag: .net 4.0

使用Dynamic而不是reflect来按名称调用方法

使用.NET-4.0,如何在不使用reflection的情况下使用Dynamic来完成以下操作? public void InvokeMethod(string methodName) { Type t = typeof(GCS_WebService); GCS_WebService reflectOb = new GCS_WebService(); MethodInfo m = t.GetMethod(methodName); m.Invoke(reflectOb, null); }

在什么情况下我在C#中运行?

我在想… 当我有这样的代码: lock (obj) { MyCode.MyAgent(); } MyAgent可以包含识别它在lock块下运行的代码吗? 关于什么: for (int i=0;i<5;i++) { MyCode.MyAgent(); } MyAgent可以包含识别它在loop块下运行的代码吗? using块, unsafe代码等可以问同样的问题…… – 你明白了…… 这可能在C#中吗? 这只是一个理论问题,我不想做任何事情……只是知识。

TlbExp.exe错误:此程序集由运行时更新版本构建

我们将服务器的一部分移动到.net 4.0。 我们已经向Vs2010迈进了第一步,但没有改变任何项目的目标框架。 作为第二步,我将服务器的特定部分移动到目标4.0,以便我们可以使用一些新function。 我在针对4.0的类库DLL上调用TLBexp.exe时遇到问题。 此DLL还引用了许多以2.0为目标的DLL。 我收到错误:TlbExp:错误TX0000:无法加载文件或程序集’file:Library.dll’或其依赖项之一。 此程序集由比当前加载的运行时更新的运行时构建,无法加载。 我正在调用随附的TLBExp:Microsoft SDKs \ Windows \ v7.0A \ bin \在我在VS2010命令提示符中调用的命令中,我引用了v4.0.30319二进制文件(例如mscorlib.tlb) 是否在允许引用2.0库的4.0 DLL上运行TLB? 如果是,那么我收到此错误的任何原因。 这是我使用的确切命令调用:“C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ tlbexp.exe”/ silent / win32 / tlbreference:“C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ mscorlib.tlb“/tlbreference:”C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.tlb”/ tlbreference:“C:\ Windows \ Microsoft.NET \ Framework \ […]

TreatControlCAsInput问题。 这是一个错误吗?

刚碰到下面描述的问题。 如果“Console.TreatControlCAsInput = true;”,则必须在ReadLine()上按[enter]两次。 我在下面写了一些演示代码。 我猜测这段代码演示了.NET 4框架中的错误,这是正确的吗? Console.Write(“Test 1: Console.TreatControlCAsInput = false\nType \”hello\”: “); { string readline = Console.ReadLine(); // type “hello” [enter]. Console.WriteLine(“You typed: {0}”, readline); // Prints “hello”. } Console.Write(“Test 2: Console.TreatControlCAsInput = true\nType \”hello\”: “); Console.TreatControlCAsInput = true; { string readline = Console.ReadLine(); // type “hello” [enter]. Console.WriteLine(“You typed: {0}”, readline); // […]

将匿名类型的强制列表列表到动态对象列表

为什么我不能将List转换为List ? 我有以下代码: var datasource = someList.Select(o => new { x = oA, y = oB }); dgvSomeGridView.DataSource = datasource.ToList(); dgvSomeGridView.DataBind(); 然后我使用以下代码访问GridView.DataSource : var ds = ((List)dgvSomeGridView.DataSource); …. 但它在我将其转换为List的行上引发错误,它说: 无法将类型为System.Collections.Generic.List’1[f__AnonymousType0’8[System.Int32,System.String]]对象System.Collections.Generic.List’1[f__AnonymousType0’8[System.Int32,System.String]]转换为System.Collections.Generic.List’1[System.Object] 。 为什么我不能将匿名类型列表转换为dynamic ,或者将错误描述为object类型? 我该如何解决这个问题? 我的代码是在C#,框架4.0,在VS2010 Pro中构建,平台是ASP.NET。 请提前帮助,谢谢。

是否可以使用ParameterExpression?

我想用out参数定义Lambda表达式。 有可能吗? 以下是我尝试过的C#.Net 4.0控制台应用程序的代码片段。 正如您在Procedure25中看到的,我可以使用lambda表达式来定义具有输出参数的委托,但是,当我想使用linq表达式执行相同操作时,过程24中的代码将失败: System.ArgumentException未处理Message = ParameterExpression类型’System.Boolean’不能用于’System.Boolean&’Source = System.Core类型的委托参数 我知道我可以使用带有bool成员的输入类对象并将值传递给调用者,但我很好奇我是否可以以某种方式定义参数。 谢谢 static void Main(string[] args) { Procedure25(); Procedure24(); Console.WriteLine(“Done!”); Console.ReadKey(); } private delegate int Evaluate(string value, out bool usesVars); private static void Procedure24() { // This fails to compile: //Expression x = (string val, out bool usesSimVals) => //{ // usesSimVals = true; // […]

Windows窗体中的线程

我多年来一直在编写ASP.NET Web应用程序,但还没有真正处理大型Windows窗体项目。 我现在需要处理一个,所以我正在寻找关于如何理想地构建大型Windows窗体项目的一些指示。 更具体地说,我想知道如何处理多个线程。 假设您有一个需要一些时间才能完成的过程 – 您不希望ui窗口被冻结且没有响应。 所以逻辑需要在一个单独的线程中移动。 如果此线程访问UI,则会导致exception。 Invoke似乎可以解决这个问题,但看起来非常难看并且阅读起来很麻烦! 那么,实际上,最佳实践是什么? 应该启动什么类型的线程,以及如何在UI和逻辑之间拆分这些线程? 任何示例代码开始?

我可以为此方案设计任何无锁解决方案

我有一个简单的Employee类如下 public class Employee { public int ID { get; set; } public string LastName { get; set; } public string FirstName { get; set; } } 然后我有一个ProcessEmployees类,它在名为ProcessThisEmployee的方法中对这些员工进行并发处理。 在这种方法中,我必须调用第三方库方法。 到目前为止一切都很简单。 问题是用户在进行操作时选择取消此操作的某个时候,我需要对尚未完成处理的任何ThirdPartyLibrary类实例进行一些清理。 注意我对ThirdPartyLibrary类没有任何控制,并且它没有任何取消现有任务的机制。 它提供了一个Clean方法,我可以在任何调用SomeAPI尚未完成的实例上调用它。 因此,我正在维护所有实例的本地列表。 当用户选择取消操作时,我调用我的类的CleaupIfUserCancelOperation方法,即清理我本地列表中第三方库实例的方法。 以下是我的代码。 class ProcessEmployees { private List _Employees; List libraries = new List(); private object sync = new object(); public ProcessEmployees() […]

Windows Forms WebBrowser控制.net 4.0框架上的错误

我从我的c#代码中抛出致命错误,我在其中定制了表单Web浏览器以支持浏览器自动完成function。 当我们尝试获取WebBrowserSite COM接口时,exception仅在.net 4.0框架上抛出。 error thrown at _baseIDocHostUiHandler = (WebBrowserNativeMethods.IDocHostUIHandler) Marshal.GetTypedObjectForIUnknown(_unkInnerAggregated, typeof (WebBrowserNativeMethods.IDocHostUIHandler)); 码: // constructor public AutoCompleteWebBrowserSite(WebBrowser host) : base(host) { // get the CCW object for this _unkOuter = Marshal.GetIUnknownForObject(this); Marshal.AddRef(_unkOuter); try { // aggregate the CCW object with the helper Inner object _inner = new AutoCompleteHelper(this); _unkInnerAggregated = Marshal.CreateAggregatedObject(_unkOuter, _inner); // obtain […]

检查结构的默认值

我的DefaultValue()函数有问题。 它总是返回false ,表示结构不是默认值。 为什么这不起作用? [StructLayout(LayoutKind.Sequential)] private struct ArrayItem { public long SrcSize; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 250)] public string SrcFile; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 250)] public string DestFile; } [StructLayout(LayoutKind.Sequential)] private struct MyInfo { public int Count; public int AppOne; public int AppTwo; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 100, ArraySubType = UnmanagedType.Struct)] public ArrayItem[] Files; } private bool DefaultValue(T […]