Tag: c ++

WPFvalidation(IDataErrorInfo)和选项卡聚焦问题

我有一个TextBox绑定到一个实现IDataErrorInfo的对象的属性。 我设置了TextBox的Validation.ErrorTemplate ,它工作正常。 问题是我在TabControl上有这些,如果我将标签更改为另一个标签然后返回到初始标签( TextBox所在的位置),则validation模板不再显示。 它看起来像是经过validation的(就像值是正确的),但实际上并非如此。 这是IDataErrorInfo对象 – 请注意,“正确”值是长度为2的字符串: public class Presenter : IDataErrorInfo { public Presenter() { this.Property = String.Empty; } public string Property { get; set; } public string Error { get { return null; } } public string this[string columnName] { get { if (columnName == “Property”) { if (this.Property.Length == 2) […]

null对象与空对象

[这是最佳实践的结果:函数应该返回null还是空对象? 但我想要非常一般。 ] 在我看过的许多遗留(生产)C ++代码中,有一种趋势是编写大量的NULL (或类似)检查来测试指针。 在添加NULL时,许多这些都会在发布周期结束时添加 – 检查可以快速解决由指针引用引起的崩溃问题 – 而且没有太多时间进行调查。 为了解决这个问题,我开始编写采用( const )引用参数的代码,而不是传递指针的(更多)常见技术。 没有指针,不想检查NULL (忽略实际具有空引用的极端情况)。 在C#中,存在相同的C ++“问题”:希望检查每个未知引用对null ( ArgumentNullException )并通过添加null检查来快速修复NullReferenceException 。 在我看来,防止这种情况的一种方法是首先使用空对象( String.Empty , EventArgs.Empty )来避免空对象。 另一种方法是抛出exception而不是返回null 。 我刚开始学习F#,但看起来那个环境中的空对象要少得多。 那么也许你真的不需要有很多null引用? 我在这里吠叫错了吗?

使用C#将* .lnk文件固定到Windows 7任务栏

即使是Windows 7中图标的程序化固定似乎也是不允许的(就像它在这里说的那样: http : //msdn.microsoft.com/en-us/library/dd378460(v = VS.85 ) .aspx ),有一些使用一些VB脚本执行此操作的方法。 有人在C#中找到了这样做的方法: private static void PinUnpinTaskBar(string filePath, bool pin) { if (!File.Exists(filePath)) throw new FileNotFoundException(filePath); // create the shell application object dynamic shellApplication = Activator.CreateInstance(Type.GetTypeFromProgID(“Shell.Application”)); string path = Path.GetDirectoryName(filePath); string fileName = Path.GetFileName(filePath); dynamic directory = shellApplication.NameSpace(path); dynamic link = directory.ParseName(fileName); dynamic verbs = link.Verbs(); for […]

ASP.NET MVC 4脚本捆绑在部署时导致错误

当@Scripts.Render()没有捆绑脚本时,我的网站在localhost上工作正常但是当我部署到我的服务器时,捆绑的Javascript必须包含错误,因为我页面上的所有Javascript都停止工作。 这是我的包代码: public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle(“~/bundles/jquery”).Include( “~/Scripts/jquery-{version}.js”, “~/Scripts/jquery-migrate-{version}.js”)); bundles.Add(new ScriptBundle(“~/bundles/jqueryval”).Include( “~/Scripts/jquery.unobtrusive*”, “~/Scripts/jquery.validate*”)); bundles.Add(new ScriptBundle(“~/bundles/jqueryui”).Include( “~/Scripts/jquery-ui-{version}.js”, “~/Scripts/jquery-ui.unobtrusive-{version}.js”)); bundles.Add(new ScriptBundle(“~/bundles/modernizr”).Include( “~/Scripts/modernizr-*”)); bundles.Add(new StyleBundle(“~/Content/css”).Include(“~/Content/site.css”)); bundles.Add(new StyleBundle(“~/Content/themes/base/css”).Include( “~/Content/themes/base/jquery.ui.core.css”, “~/Content/themes/base/jquery.ui.resizable.css”, “~/Content/themes/base/jquery.ui.selectable.css”, “~/Content/themes/base/jquery.ui.accordion.css”, “~/Content/themes/base/jquery.ui.autocomplete.css”, “~/Content/themes/base/jquery.ui.button.css”, “~/Content/themes/base/jquery.ui.dialog.css”, “~/Content/themes/base/jquery.ui.slider.css”, “~/Content/themes/base/jquery.ui.tabs.css”, “~/Content/themes/base/jquery.ui.datepicker.css”, “~/Content/themes/base/jquery.ui.progressbar.css”, “~/Content/themes/base/jquery.ui.theme.css”)); } 这是我的渲染代码: @Styles.Render(“~/Content/css”) @Styles.Render(“~/Content/themes/base/css”) @Scripts.Render(“~/bundles/jquery”) @Scripts.Render(“~/bundles/jqueryval”) @Scripts.Render(“~/bundles/jqueryui”) @Scripts.Render(“~/bundles/modernizr”) 有人可以解释部署时我的Javascript可能会发生什么吗? 谢谢,Alex。

Windows 7中的代码中的停止/启动服务

我正在尝试编写一个应用程序和服务来监视一组给定的服务,并且a)确保它们正在运行,并且b)根据某些标准,根据需要重新启动它们。 我一直遇到拒绝访问错误。 如果我只是遍历系统上的进程,找到我想要的那样: foreach (ServiceController sc in ServiceController.GetServices()) { if(sc.ServiceName == “MyServiceName”) { sc.Stop(); sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 60)); sc.Start(); } } 我明白了: InnerException: System.InvalidOperationException Message=”Cannot open My Service service on computer ‘.’.” Source=”System.ServiceProcess” StackTrace: at System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess) at System.ServiceProcess.ServiceController.Stop() at lib.ListServices() in D:\lib.cs:line 552 at lib.Init() in D:\lib.cs:line 56 InnerException: System.ComponentModel.Win32Exception Message=”Access is denied” […]

在c#中创建非托管c ++对象

我有一个非托管的dll,里面有一个“MyClass”类。 现在有没有办法用C#代码创建这个类的实例? 要调用它的构造函数? 我尝试过,但是visual studio会报告错误,并显示该内存区域已损坏或其他内容。 提前致谢

生成P / Invoke代码的最简单方法是什么?

我是一位经验丰富的.Net程序员,但在我的生活中还没有编译过C / C ++程序。 现在我有这个C-dll,标题和文档(第三方,而不是Win API),我需要从中调用十种方法。 我在考虑使用Platform Invoke。 我发现这三个工具可以为我创建代码: PInvoker: http ://www.pinvoker.com P / Invoke Interop助手: http : //www.codeplex.com/clrinterop P / Invoke向导: http : //www.paulyao.com/res/pinvoke/pinvoke.aspx 可能 Swig: http ://www.swig.org/ Pinvoker似乎与Interop助手和向导有一些不同的方法。 Swig我刚刚检查到这里没有问过这个问题。 这些工具的优缺点是什么? 鉴于我对C / C ++知之甚少,对我来说生成P / Invoke代码的最佳=最简单,最安全的方法是什么?

在PresentationFramework.dll中发生了System.Windows.Markup.XamlParseException?

我在C#上使用WPF作为代码如下 //My GUI Code here 当我运行应用程序时,它将抛出以下exception An unhandled exception of type ‘System.Windows.Markup.XamlParseException’ occurred in PresentationFramework.dll Additional information: ‘The invocation of the constructor on type ‘DVRClientInterface.MainWindow’ that matches the specified binding constraints threw an exception.’ Line number ‘9’ and line position ‘5’. If there is a handler for this exception, the program may be safely continued. […]

用于计算百分位数以移除exception值的快速算法

我有一个程序需要重复计算数据集的近似百分位数(顺序统计),以便在进一步处理之前删除exception值。 我目前正在通过对值数组进行排序并选择适当的元素来实现这一目标; 这是可行的,但尽管是该计划的一个相当小的部分,但它在配置文件上是一个明显的昙花一现。 更多信息: 该数据集包含最多100000个浮点数的数量级,并假设“合理地”分布 – 在特定值附近不太可能存在重复,密度也不大; 如果由于某种奇怪的原因,分布是奇数,那么近似值就不太准确了,因为数据可能无论如何都搞砸了,并且进一步处理可疑。 但是,数据不一定是统一的或正态分布的; 它不太可能退化。 一个近似的解决方案很好,但我需要了解近似值如何引入错误以确保它有效。 由于目标是去除exception值,我在任何时候都在同一数据上计算两个百分点:例如一个在95%,一个在5%。 该应用程序在C#中,在C ++中有点繁重; 任何一个伪代码或预先存在的库都可以。 一个完全不同的去除exception值的方法也可以,只要它是合理的。 更新:似乎我正在寻找一种近似选择算法 。 虽然这都是在一个循环中完成的,但每次数据都会略微不同,因此重用数据结构并不像这个问题那样容易。 实施解决方案 使用Gronim建议的维基百科选择算法将这部分运行时间缩短了大约20倍。 由于我找不到C#实现,这就是我想出的。 即使对于小型输入,它也比Array.Sort更快; 在1000个元素上,速度提高了25倍。 public static double QuickSelect(double[] list, int k) { return QuickSelect(list, k, 0, list.Length); } public static double QuickSelect(double[] list, int k, int startI, int endI) { while (true) { // Assume […]

以当前用户身份从Windows服务运行进程

我目前有一个在系统帐户下运行的Windows服务。 我的问题是我需要从服务中启动某些进程作为当前登录用户。 我有所有代码等来获取当前登录的用户/活动会话。 我的问题是我需要生成一个进程作为登录用户但不知道用户凭据等。 该服务是.net编译服务,我希望我需要使用一些Pinvoke方法来获取当前用户进程之一的句柄,以便将其复制并作为句柄处理午餐。 不幸的是,我找不到任何关于如何实施它的好文档/解决方案? 如果有人能够给我一些指导/示例,我将非常感激。 *更新*我想我已经解释不正确,需要根据我的实际需要重新调整。 我不一定要启动新进程,我只是想模拟已登录的用户。 我已经非常专注于查看CreateProcess等我已经引导自己沿着创建新进程的路径作为当前登录用户(这不是我想要做的事情)。 反过来,我只想在当前用户上下文下运行一些代码(模拟当前登录用户)?