小编ygo*_*goe的帖子

修改内部.NET类的方法实现

我想修改我的C#/ .NET应用程序在内部工作的方式.我已经使用Reflector挖掘了.NET框架,并找到了一个非常好的地方,我可以使用不同的方法实现.这是System.Windows.Forms命名空间中的内部类.您显然无法使用常规方法更改此类的代码,因此我认为可以在运行时通过反射替换其中的方法.我想完全替换我的应用程序的方法是这样的:

public static WindowsFontQuality WindowsFontQualityFromTextRenderingHint(Graphics g)

在课堂里:

internal sealed class System.Windows.Forms.Internal.WindowsFont

有没有办法加载该类型并在运行时替换该方法,而不影响当前正在运行或之后启动的任何其他应用程序?我试图用Type.GetType()类似的东西加载类型但到目前为止失败了.

.net c# reflection

3
推荐指数
1
解决办法
1832
查看次数

如何在我的应用程序中保持窗口在所有其他窗口之上?

我想在我的C#Windows窗体应用程序中显示一个状态窗口,该窗口会在应用程序等待获取锁定时通知用户.这是一个应用程序定义的东西,但是,窗口应该是可见的并且始终保持在我的应用程序的所有其他窗口之上,即使用户单击另一个窗口(例如它后面的较大的主窗口).

它不能是模态的(因此不能使用ShowDialog())因为应用程序需要在后台继续尝试并且如果最终可以获取锁定则自动关闭窗口,并且它实际上不应该是整个窗口的最顶层站(即在该终端会话中运行的所有应用程序).

我知道Form.TopMost属性,但它只能带来并保持一个窗口高于所有其他窗口,甚至是其他应用程序的窗口.这显然不是我想要的.

我知道这是可能的,我以前在其他应用程序中已经看过很多次了.我只是不知道怎么做.

c# window topmost

3
推荐指数
1
解决办法
7150
查看次数

获取当前正在执行的批处理脚本的父文件夹名称

Windows(XP及更高版本)上的批处理文件需要知道它所在目录的名称.只有文件夹名称,而不是整个路径,而不是批处理文件名本身.

因此,存储在C:\ temp\abc\script.cmd中的文件应该在变量中得到名称"abc".

怎么办?

通常的参数扩展,例如%~p0只能提取整个路径(\ temp\abc \),它们只能在真实参数(%0,%1,%2 ...)上工作而不能在其他变量上工作,因此它们不能堆叠或组合.所以他们对这项任务太有限了.该for命令只能从开始处定位到定义位置的令牌,而不是"最后"或倒数第二个令牌.

为了简化执行和可移植性,它必须是批处理文件(.cmd),而不是PowerShell.

variables path batch-file

3
推荐指数
1
解决办法
4969
查看次数

ContextMenu命令绑定未随数据源更新

在我的WPF应用程序中,有一个列表可供选择。然后,所选项目将显示在ContentControl中以进行进一步的交互。根据所选项目的类型(可以有多个),在ContentControl中使用适当的DataTemplate。到目前为止,对于数据处理业务应用程序来说这应该没有什么异常。

在每个DataTemplate中,都有多个TextBoxes和其他控件,这些控件将其值绑定到ViewModel类的特定属性。从列表中选择另一个项目时,所有这些都将按预期更新。这些按钮还会在ViewModel的正确实例上执行其命令。

有一个上下文菜单项也可以执行命令,但这仅适用于第一个选定的项。当从列表中选择另一个相同类型的元素时,重新使用已经加载的模板视图,上下文菜单中的命令将始终在第一个选择的项目上执行。因此,绑定未更新为ViewModel的正确实例。

使菜单项使用正确的ViewModel实例的唯一方法是选择其他类型的项,以便将模板更改为另一个视图。只有这样,上下文菜单才能正确更新。

为什么菜单项命令不会像视图中的其他绑定一样被更新?它在加载时被提取一次,但在视图的生命周期中从未更新过。

wpf binding command

3
推荐指数
1
解决办法
1253
查看次数

从Firefox加载项登录控制台

Mozilla文档(https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/console.html)说我应该用来console.log从扩展中生成消息.据说这些消息出现在Firefox错误控制台中.但对我来说情况并非如此.我今天第一次使用Addon构建器,我想创建一个扩展来切换某些事件的标签.选项卡确实已切换,并且是我期望的选项卡,因此我的代码肯定会运行.但是console.log输出无处可见.

我已将过滤器设置为"全部".我看到的只是插件构建器本身的CSS警告.

我还安装了Firebug.它也没有显示任何东西.(虽然从网页上下文中使用console.log时这很好.)Firebug的问题在于它只对一个/某个选项卡启用,所以当切换选项卡时,它是无用的.我需要一个始终存在的日志窗口.

那么console.log的输出会在哪里结束?

console firefox logging mozilla firefox-addon

3
推荐指数
2
解决办法
5437
查看次数

在PhantomJS/CasperJS中设置屏幕尺寸

我正在自动访问网站以从中收集数据.不幸的是,如果屏幕太小,该页面会检测到屏幕尺寸并且不会给我所需的页面.从非交互式上下文(IIS Web应用程序)运行脚本时,Screen对象似乎返回1024x768像素的大小.即使我将视口大小设置为1300x1000像素,这会影响屏幕截图,但不会影响网页的JavaScript.

我怎么能告诉PhantomJS或CasperJS(我使用后者但是使用前者)在页面的JavaScript中为Screen对象返回不同的值?

编辑:这是CasperJS,而不是PhantomJS,所以它不是重复的.

javascript screen-size phantomjs casperjs

3
推荐指数
1
解决办法
6914
查看次数

值是一个枚举和-1?

对于视图模型验证,我需要确定一个值(我只有一个对象接口)是一个枚举并且数值为-1.

我试过这个:

// object value;
if (value?.GetType().IsEnum == true && (int)value == -1) return null;
Run Code Online (Sandbox Code Playgroud)

它应该与我的模型枚举一起使用,这些枚举主要基于int.

但是当值是一个Visibility枚举(它恰好也在视图模型类中并且应该被忽略以进行验证)时它会失败,而这个枚举基于byte代替int而且似乎不能转换为int.我可以做更多的测试,但它不应该太慢.

对此有一个很好的简单解决方案吗?也许是Enum班上的一些测试方法还是什么?

.net c# enums

3
推荐指数
1
解决办法
115
查看次数

何时等待动态调用的方法?

我的代码执行此操作是为了在网络请求传入时调用已注册的方法。它是 RPC 系统的一部分。

Delegate method;
object result = method.DynamicInvoke(args);
Run Code Online (Sandbox Code Playgroud)

当该方法返回一个值时,一切都很好。但是,当它返回可等待的内容时,我对尝试将可等待的内容返回给网络调用者不感兴趣。他们不会使用它,而且它可能无论如何也无法转让。相反,我需要等待它然后返回实际结果。

我可以检查该方法的返回类型是否类似于Task. 或者一个Task<T>. 够了吗?宇宙中难道就没有其他值得期待的事情吗?我将如何测试该类型Task?我的意思是我不能只做这样的事情:

method.Method.ReturnType is Task
Run Code Online (Sandbox Code Playgroud)

这不会是真的。而且也没有:

method.Method.ReturnType.IsAwaitable
Run Code Online (Sandbox Code Playgroud)

我承认我不能等待一个async void方法。但其他任何最终可以等待的事情都应该等待。

.net c# reflection async-await

3
推荐指数
1
解决办法
1712
查看次数

为什么Git会忽略.vs目录?

我已经安装了Visual Studio 2015,在此之前我已经有了Git for Windows 1.9.5和TortoiseGit 1.8.14.3.

Git忽略了源项目中隐藏的.vs目录.它甚至在没有隐藏属性时忽略它.虽然这完全没问题,但我想了解为什么会被忽略.它不在我的.gitignore文件中,也找不到全局忽略文件.这是某种Git内置行为忽略.vs目录吗?它从不忽略以前Visual Studio版本的root*.suo文件,所以我假设并期望我自己需要处理它.

在某些情况下Git可能会在某些时候停止忽略该目录,所以我应该将它添加到我的.gitignore文件中吗?

git visual-studio-2015

2
推荐指数
1
解决办法
357
查看次数

在.NET中输入finally块之前是否可以检测是否发生了异常?

Java也提出了同样的问题,但我对.NET的答案很感兴趣.

请考虑以下代码:

class Program
{
    static void Main()
    {
        try
        {
            RunTransaction();
            // If there was an exception within the transaction,
            // I won't be here anymore. But if the transaction was
            // cancelled without an exception being thrown, I really
            // need to know because I must stop here anyway.
            OtherCode();
        }
        catch (Excexption ex)
        {
            // Log the exception...
            // If an exception was thrown in the transaction scope,
            // this must be logged here. If a "helper" …
Run Code Online (Sandbox Code Playgroud)

.net c# exception

2
推荐指数
1
解决办法
334
查看次数