我有各种任务的令牌,我需要更好地管理他们的取消,以获得我可以使用的取消通知:
token.Register(RegisterMethod);
Run Code Online (Sandbox Code Playgroud)
如何删除此"订阅"?有没有办法"UnRegister"?
我想过用TaskCompletionSource做一个解决方法.但我不知道它是否会运作良好.解决这种方法的最佳方法是什么?
我在使用反射时遇到了性能问题.
所以我决定为我的对象的属性创建委托,到目前为止得到了这个:
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>
因为我的应用程序的结构.
在使用旧版本的Visual Studio和ASP.NET的日子里,可以在调试时编辑代码(即使有一些限制).
如何在VS 2015 RC中启用编辑并继续使用ASP.Net/VNext(MVC 6).这个功能可用吗?我收到的消息是:
"如果在调试开始时没有构建项目,则不允许进行更改".
如何在调试模式启动时构建项目?
我的问题很多.从我看到.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
我有三个配置文件,每个环境一个:
如果我将ASPNETCORE_ENVIRONMENT设置为dev,我会收到一个运行时异常,抱怨无法找到appsettings.dev.json.我尝试添加
"copyToOutput": [
"appsettings.dev.json"
]
Run Code Online (Sandbox Code Playgroud)
到buildOptions
project.json中的部分,但它似乎没有任何影响.
有没有其他方法可以强制appsettings.dev.json被复制到输出目录?
我的应用程序可以根据数据库中的设置(文件,类和方法名称)动态加载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) 我无法在visual studio 2012 profissional中创建一个安装项目(启用installshield限量版)我收到以下错误:
"..项目创建失败",没有更多细节
已经检查了文件夹权限并重置了visual studio的设置,我该如何解决这个问题?
Observable.Concat
是一个连接observable的实现,但第二个IObservable<T>
只在第一个完成时才进行订阅.
http://www.introtorx.com/content/v1.0.10621.0/12_CombiningSequences.html#Concat
是否有"HotConcat"的实现?类似于Observable.Merge
,但保持交付顺序,首先推动初始订阅的元素,然后推动子后续.就像是:
我知道可以使用ReplaySubject<T>
,但它似乎不太好,因为性能和内存使用影响..
我可以在堆栈跟踪中抛出一些文本吗?
我的应用程序已经掌握了抛出的异常.但是想了解一些方法(参数)的更多信息.
这个想法是做类似的事情
StackTrace.Insert (0, "argument:" + test);
Run Code Online (Sandbox Code Playgroud)
我知道这不酷,但有可能吗?
我正在尝试在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位置.
c# ×7
asp.net-core ×2
reflection ×2
action ×1
asp.net ×1
async-await ×1
async-ctp ×1
exception ×1
expression ×1
f# ×1
f#-data ×1
installer ×1
lambda ×1
setvalue ×1
stack-trace ×1
task ×1
wpf ×1