Tag: .net

将大型C#winforms应用程序升级到WPF的最简单方法是什么?

我在一个大型的C#应用​​程序(大约450,000行代码)上工作,我们经常遇到桌面堆和GDI处理泄漏的问题。 WPF解决了这些问题,但我不知道升级的最佳方法是什么(我预计这需要很长时间)。 应用程序只有几种forms,但这些forms可以包含许多不同的用户控件集,这些用户控件是以编程方式确定的。 这是一个内部公司应用程序,因此我们的发布周期非常短(通常为3周发布周期)。 是否有一些渐进的升级路径,或者我们是否必须付出巨大的努力?

.NET中是否可以使用不可变数组?

是否有可能以某种方式将System.Array标记为不可变。 当置于public-get / private-set之后,它们无法添加,因为它需要重新分配和重新分配,但消费者仍然可以设置他们希望的任何下标: public class Immy { public string[] { get; private set; } } 我认为readonly关键字可能会起作用,但没有这样的运气。

asp.net mvc razor额外的空间

Razor在文本块之间插入额外的空间。 我想以这种方式呈现一个列表:“1,2,3”但得到“1,2,3”。 @for (int i = 1; i < 3; i++) { @i if (i != 2) { , } } 有没有办法删除这个额外的空间?

WCF不活动超时

我创建了一个非常简单的WCF服务,托管在Windows服务上,密切关注MSDN上的示例: http : //msdn.microsoft.com/en-us/library/ff649818.aspx 如果我在第一次通话后第二次拨打我的服务> 10分钟,我将收到一个非活动超时错误。 我知道这是WCF客户端的默认设置。 但是,当我更改我的app.config时 至 我尝试拨打电话时收到此错误消息: 由于EndpointDispatcher上的ContractFilter不匹配,因此无法在接收方处理带有Action“http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence”的消息。 这可能是由于合同不匹配(发送方与接收方之间的操作不匹配)或发送方与接收方之间的绑定/安全性不匹配。 检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息,传输,无)。 这就是我的WCF配置文件在Windows服务上的样子。 我的问题是,如何将不活动时间设置为inifinte,并规避我得到的错误?

System.ServiceModel.CommunicationException:基础连接已关闭

我正在从wcf Web服务中检索数据,当数据超过20万条记录时,我得到一个exception,如下所示: System.ServiceModel.CommunicationException: The underlying connection was closed: A connection that was expected to be kept alive was closed by the server. —> System.Net.WebException: The underlying connection was closed: A connection that was expected to be kept alive was closed by the server. —> System.IO.IOException: Unable to read data from the transport connection: An existing […]

如何查找调用方法C#的完整名称

如何在c#中找到调用方法的全名。 我见过解决方案: 我如何在C#中获取调用方法 如何找到调用当前方法的方法? 从Called函数获取调用函数名称 但他们只给我顶级水平。 考虑这个例子: namespace Sandbox { class Program { static void Main(string[] args) { test(); } static void test() { var stackTrace = new StackTrace(); var methodBase = stackTrace.GetFrame(1).GetMethod(); Console.WriteLine(methodBase.Name); } } } 这只是输出’Main’如何让它打印’Sandbox.Program.Main’? 在任何人开始询问我为什么需要使用它之前,它是一个我正在处理的简单日志框架。 编辑 添加到Matzi的答案: 这是解决方案: namespace Sandbox { class Program { static void Main(string[] args) { test(); } […]

将当前程序集加载到不同的AppDomain中

我创建了一个具有不同基目录的AppDomain 。 但是,我似乎无法将当前正在执行的程序集加载到其他AppDomain中,而没有基本目录中当前正在执行的程序集的副本。 我甚至试图从字节加载它。 我尝试加载时没有exception,但是当我尝试使用时: domain.DoCallBack(new CrossAppDomainDelegate(… 我明白了: 无法加载文件或程序集………..系统找不到指定的文件。 我的代码如下: private static void SaveAssemblies(Assembly ass, List assemblyByteList) { AssemblyName[] assNames = ass.GetReferencedAssemblies(); foreach (AssemblyName assName in assNames) { Assembly referedAss = Assembly.Load(assName); if (!referedAss.GlobalAssemblyCache) { SaveAssemblies(referedAss, assemblyByteList); } } byte[] rawAssembly = File.ReadAllBytes(ass.Location); assemblyByteList.Add(rawAssembly); } public static AppDomain CreateAppDomain(string dir, string name) { AppDomainSetup domainSetup […]

IIS6 WebService下Environment.GetFolderPath(Environment.SpecialFolder.ApplicationFolder)返回的错误路径

在运行的测试计算机上(Windows XP,IIS5.1),在自定义进程标识下的C#.NET WebService(.SVC)中执行以下代码(使用machine.config指定用户) Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 正确回归 c:\Documents and Settings\myUserName\Application Data 但是,在运行IIS6的(终端服务)Windows 2003计算机上执行相同的代码但现在使用ApplicationPool指定相同的进程标识,该方法返回: c:\Documents and Settings\Default User\Application Data 我在Win2003 / IIS6机器上运行时检查过的事情: myUserName属于IIS_WPG组(甚至尝试过管理员) 对Environment.UserName的调用正确返回myUserName 对Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)的调用; 还会返回“默认用户”路径,同样使用DesktopDirectory 以myUserName身份登录并确保C:\ Documents和settings \ myUserName存在 在Windows 2003框中的.net应用程序中运行完全相同的代码,这将工作并返回正确的路径。 我很困惑,它只发生在IIS6下运行时。 它几乎就像是认为呼叫来自网络服务或本地系统用户,而不是检查运行应用程序池的身份。 顺便说一下,当我查看Procmon并观看从Web服务调用的C ++应用程序时,它没有读取和写入C:\ Documents和settings \ myUserName \ ApplicatonData这样的问题,它似乎没有问题,也许它构建了路径不同。 我开始认为这可能是.NET中的一个错误? 谢谢。 汤姆德洛福德

如何在现有PDF中使用iTextSharp向其他页面插入超链接?

我想添加一个链接到现有的pdf,跳转到另一个页面上的坐标。 我可以使用以下代码添加一个矩形: PdfContentByte overContent = stamper.GetOverContent(1); iTextSharp.text.Rectangle rectangle = new Rectangle(10,10,100,100,0); rectangle.BackgroundColor = BaseColor.BLUE; overContent.Rectangle(rectangle); stamper.Close(); 我怎样才能创建一个可点击的链接呢? 谢谢。

C#WPF – DragMove并单击

我需要一个控件来调用MouseLeftButton上的Window的DragMove(),但是在单击时仍然可以运行。 如果调用DragMove(),则不会触发Click和MouseLeftButtonUp,因为DragMove()是一个阻塞调用,直到它们释放鼠标按钮。 有没有人知道一个解决方法来使这项工作? 我已经尝试过基于Thread.Sleep的这个hack,它允许点击工作,如果它快于100毫秒,但它对用户不起作用: ThreadPool.QueueUserWorkItem(_ => { Thread.Sleep(100); Dispatcher.BeginInvoke((Action) delegate { if (Mouse.LeftButton == MouseButtonState.Pressed) { window.DragMove(); } }); }); 编辑:这个黑客工作… window.DragMove(); RaiseEvent(new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, MouseButton.Left) { RoutedEvent = MouseLeftButtonUpEvent }); 谁有更好的?