小编J. *_*non的帖子

CancellationToken UnRegister Action

我有各种任务的令牌,我需要更好地管理他们的取消,以获得我可以使用的取消通知:

token.Register(RegisterMethod);
Run Code Online (Sandbox Code Playgroud)

如何删除此"订阅"?有没有办法"UnRegister"?

我想过用TaskCompletionSource做一个解决方法.但我不知道它是否会运作良好.解决这种方法的最佳方法是什么?

c# task async-await async-ctp cancellation-token

28
推荐指数
1
解决办法
3305
查看次数

反射性能 - 创建代理(属性C#)

我在使用反射时遇到了性能问题.
所以我决定为我的对象的属性创建委托,到目前为止得到了这个:

TestClass cwp = new TestClass();
var propertyInt = typeof(TestClass).GetProperties().Single(obj => obj.Name == "AnyValue");
var access = BuildGetAccessor(propertyInt.GetGetMethod());
var result = access(cwp);
Run Code Online (Sandbox Code Playgroud)
static Func<object, object> BuildGetAccessor(MethodInfo method)
{
    var obj = Expression.Parameter(typeof(object), "o");

    Expression<Func<object, object>> expr =
        Expression.Lambda<Func<object, object>>(
            Expression.Convert(
                Expression.Call(
                    Expression.Convert(obj, method.DeclaringType),
                    method),
                typeof(object)),
            obj);

    return expr.Compile();
}
Run Code Online (Sandbox Code Playgroud)

结果非常令人满意,比使用传统方法快30-40倍(PropertyInfo.GetValue (obj, null);)

问题是:我怎样才能创建SetValue一个属性相同的属性?不幸的是没有办法.

我这样做是因为我不能使用方法,<T>因为我的应用程序的结构.

c# reflection expression action setvalue

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

如何在ASP.Net MVC 6中编辑和继续

在使用旧版本的Visual Studio和ASP.NET的日子里,可以在调试时编辑代码(即使有一些限制).

如何在VS 2015 RC中启用编辑并继续使用ASP.Net/VNext(MVC 6).这个功能可用吗?我收到的消息是:

错误 "如果在调试开始时没有构建项目,则不允许进行更改".

如何在调试模式启动时构建项目?

c# asp.net-core-mvc visual-studio-2015 asp.net-core

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

将使用backgroundworker的方法替换为async/tpl(.NET 4.0)

我的问题很多.从我看到.NET 4.5,我印象非常深刻.不幸的是我的所有项目都是.NET 4.0,我不考虑迁移.所以我想简化我的代码.

目前,我的大多数代码通常需要足够的时间来冻结屏幕,我会执行以下操作:

BackgroundWorker bd = new BackgroundWorker();
bd.DoWork += (a, r) =>
    {
        r.Result = ProcessMethod(r.Argument);
    };
bd.RunWorkerCompleted += (a, r)  =>
    {
        UpdateView(r.Result);
    };

bd.RunWorkerAsync(args);
Run Code Online (Sandbox Code Playgroud)

老实说,我已经厌倦了.当存在逻辑复杂的用户交互时,这成为一个大问题.

我想知道,如何简化这种逻辑?(请记住,我在.Net 4.0)我注意到谷歌的一些事情,但没有找到任何易于实施和适合我的需求.

我认为这个解决方案如下:

var foo = args as Foo;
var result = AsyncHelper.CustomInvoke<Foo>(ProcessMethod, foo);
UpdateView(result);

public static class AsyncHelper
{
    public static T CustomInvoke<T>(Func<T, T> func, T param) where T : class
    {
        T result = null;
        DispatcherFrame frame = new DispatcherFrame();
        Task.Factory.StartNew(() =>
        {
            result = func(param);
            frame.Continue = false; …
Run Code Online (Sandbox Code Playgroud)

wpf design-patterns pattern-matching backgroundworker task-parallel-library

14
推荐指数
1
解决办法
3958
查看次数

如何确保将appsettings.dev.json复制到输出文件夹?

我有三个配置文件,每个环境一个:

  1. appsettings.json - >制作
  2. appsettings.dev.json - >开发
  3. appsettings.stg.json - > staging

如果我将ASPNETCORE_ENVIRONMENT设置为dev,我会收到一个运行时异常,抱怨无法找到appsettings.dev.json.我尝试添加

"copyToOutput": [
  "appsettings.dev.json"
]
Run Code Online (Sandbox Code Playgroud)

buildOptionsproject.json中的部分,但它似乎没有任何影响.

有没有其他方法可以强制appsettings.dev.json被复制到输出目录?

c# asp.net configuration web-deployment asp.net-core

14
推荐指数
5
解决办法
1万
查看次数

为任何方法创建Func或Action(使用c#中的反射)

我的应用程序可以根据数据库中的设置(文件,类和方法名称)动态加载dll.为了方便,加快和减少反射的使用,我想有一个缓存....

遵循使用的想法:

 MethodInfo.Invoke
Run Code Online (Sandbox Code Playgroud)

没有任何表演(反映性能 - 创建代表(属性C#))我想翻译任何方法调用.我想到了一些像这样的东西:

public static T Create<T>(Type type, string methodName) // or
public static T Create<T>(MethodInfo info) // to use like this:
var action = Create<Action<object>>(typeof(Foo), "AnySetValue");
Run Code Online (Sandbox Code Playgroud)

一个要求是所有参数都可以是对象.

我正在尝试处理表达式,到目前为止我有这样的事情:

    private void Sample()
    {
        var assembly = Assembly.GetAssembly(typeof(Foo));

        Type customType = assembly.GetType("Foo");

        var actionMethodInfo = customType.GetMethod("AnyMethod");
        var funcMethodInfo = customType.GetMethod("AnyGetString");
        var otherActionMethod = customType.GetMethod("AnySetValue");
        var otherFuncMethodInfo = customType.GetMethod("OtherGetString");

        var foo = Activator.CreateInstance(customType);
        var actionAccessor = (Action<object>)BuildSimpleAction(actionMethodInfo);
        actionAccessor(foo);

        var otherAction = (Action<object, object>)BuildOtherAction(otherActionMethod);
        otherAction(foo, string.Empty);

        var otherFuncAccessor …
Run Code Online (Sandbox Code Playgroud)

c# reflection lambda expression-trees

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

项目创建失败(vs2012中的InstallShield)

我无法在visual studio 2012 profissional中创建一个安装项目(启用installshield限量版)我收到以下错误:

"..项目创建失败",没有更多细节

已经检查了文件夹权限并重置了visual studio的设置,我该如何解决这个问题?

installer visual-studio-2012 installshield-le

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

热门康卡特在Rx

Observable.Concat是一个连接observable的实现,但第二个IObservable<T>只在第一个完成时才进行订阅.

http://www.introtorx.com/content/v1.0.10621.0/12_CombiningSequences.html#Concat

是否有"HotConcat"的实现?类似于Observable.Merge,但保持交付顺序,首先推动初始订阅的元素,然后推动子后续.就像是: 热门康卡特

我知道可以使用ReplaySubject<T>,但它似乎不太好,因为性能和内存使用影响..

c# system.reactive

9
推荐指数
1
解决办法
1119
查看次数

用stacktrace写

我可以在堆栈跟踪中抛出一些文本吗?

我的应用程序已经掌握了抛出的异常.但是想了解一些方法(参数)的更多信息.

这个想法是做类似的事情

StackTrace.Insert (0, "argument:" + test);
Run Code Online (Sandbox Code Playgroud)

我知道这不酷,但有可能吗?

c# exception stack-trace

8
推荐指数
2
解决办法
4451
查看次数

如何在VS 2015中使用FSharp.Data?

我正在尝试在FSharp项目的脚本文件中使用FSharp.Data,而我收到的错误是:

警告'..\packages\FSharp.Data.2.2.5\lib \net40\FSharp.Data.dll'不是有效的程序集名称.

FSharp.Data来自https://www.nuget.org/packages/FSharp.Data/

如果我尝试使用.NET 4.0,.NET 4.5或.NET 4.6的F#项目,那就是同样的问题.

编辑:它适用于'..\packages\FSharp.Data.2.2.5\lib\portable-net40 + sl5 + wp8 + win8\FSharp.Data.dll'但在此便携版本中仅支持Web位置.

f# f#-data visual-studio-2015

8
推荐指数
1
解决办法
280
查看次数