哪个更正确,为什么?
Control.BeginInvoke(new Action(DoSomething), null);
private void DoSomething()
{
MessageBox.Show("What a great post");
}
Run Code Online (Sandbox Code Playgroud)
要么
Control.BeginInvoke((MethodInvoker) delegate {
MessageBox.Show("What a great post");
});
Run Code Online (Sandbox Code Playgroud)
我觉得我在做同样的事情,所以什么时候适合使用MethodInvoker
vs Action
,甚至写一个lambda表达式?
编辑:我知道写一个lambda vs之间并没有什么区别Action
,但MethodInvoker
似乎是出于特定目的.它有什么不同吗?
我有一个包含几个不同项目的解决方案:几个dll项目,一个控制台项目和几个WCF项目.
控制台项目使用其中一个项目的DLL,但我设置了VS,以便控制台项目没有依赖项.但是,当我调试控制台项目VS启动或构建我的所有项目时.这只是一个痛苦,因为WCF项目都编译并启动了WCF客户端或asp.net开发IIS进程.有没有办法防止这种行为?
编辑:我已经半修复了.为了防止WCF库启动,我遵循以下内容:如何防止Visual Studio在Debuggin中启动WcfSvcHost.exe?
但我仍然无法阻止asp.net dev服务器启动.
我刚刚将Asp.Net Web Api 2.2项目上传到生产服务器,我收到了标题中的错误.
在我的Web.config中我已经有了这个:
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
该文件确实存在于bin中.什么会导致这个?
我的所有Asp.Net Web API文件都是最新的,并显示5.2.2作为版本.它在我的开发机器上工作正常.
asp.net web-config assemblybinding asp.net-web-api assembly-binding-redirect
我最近在MSDN上阅读了这个帖子.所以我在考虑使用lambda表达式作为调用EndInvoke的方式,以确保一切都很好和整洁.哪个更正确?
例1:
Action<int> method = DoSomething;
method.BeginInvoke(5, (a)=>{method.EndInvoke(a);}, null);
Run Code Online (Sandbox Code Playgroud)
例2:
Action<int> method = DoSomething;
method.BeginInvoke(5, (a)=>
{
Action<int> m = a.AsyncState as Action<int>;
m.EndInvoke(a);
}, method);
Run Code Online (Sandbox Code Playgroud) 我正在经历一个我接管的项目,在数据库方面,我注意到以前的程序员编写了一堆触发器来删除子记录.问题是,这些记录已经与我要删除的父记录有外键关系.删除触发器只是子记录的简单删除语句.
编写触发器以删除子记录是否有好处,或者我可以将其更改为在删除时级联并且没问题?
我正在使用MSSQL 2008.
我正在加速.NET 4.5中的Asp.Net Identity.我设置了一个测试应用程序,用于注册,登录并尝试拨打需要"管理员"声明的Api控制器:
[Authorize(Roles="Admin")]
public class WorkController : ApiController
Run Code Online (Sandbox Code Playgroud)
当发出没有"Admin"声明的请求时,Web Api仍然返回200-OK,但是JSON为: {Message:"Authorization has been denied for this request."}
这对我来说有点奇怪,因为这并不代表成功的要求.我期待401错误.我无法找到有关如何自定义响应的信息,或返回正确的状态代码....我想我应该问401是否适合这个,或者200是正确的状态代码使用,我应该只是处理它?
编辑:由于某种原因它现在返回401.现在我不明白为什么我之前收到JSON消息,如果它被拒绝?
我正在尝试将我的Web Api项目转换为使用属性路由.我不理解的一件事是POST请求的CreatedAtRoute方法.在我的WebApiConfig.cs中,我曾经有过
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/account/{accountId}/site/{siteId}/visitor/{visitorId}/session/{sessionId}/{controller}/{action}",
defaults: new { action = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
我评论说这不再需要它,但CreatedAtRoute想要路线的名称而无法找到它.那么如何处理属性路由呢?
我们在WinForm(CefSharp控件)中有一个控件,当用户屏幕在Windows上设置为125%时,它会受到图形工件的影响.它不仅仅是控制,独立Chrome在某种程度上做到了.我们能够修复工件的唯一方法是更改下图所示的exe设置.有没有办法在代码中更改它?
编辑:这不是重复.制作应用程序DPI意识与DPI缩放不一样
我试图使用jquery将焦点带到窗口.通过父页面上的按钮单击弹出窗口.我在子窗口中进行了一些ajax调用,因此数据正在更新.我的问题是,如果用户点击父窗口并隐藏其后面的子项,我想在有数据更新时将该子窗口恢复到最前端.
在$(document).ready中我连接了这些事件:
$(window).blur(function(){
WindowHasFocus =false;
}).focus(function(){
WindowHasFocus =true;
});
Run Code Online (Sandbox Code Playgroud)
然后,如果数据更新,我调用此函数:
function FocusInput(){
if(!WindowHasFocus){
$(window).focus();
}
}
Run Code Online (Sandbox Code Playgroud)
这在IE8中按预期工作,但在FireFox(以及所有其他浏览器)中,如果单击父窗口,Blur事件似乎会触发.关于如何实现这一点的任何建议/想法?
更新:
总facepalm时刻:在FireFox中:*工具*选项...*内容选项卡*"启用JavaScript"旁边的高级按钮*选中名为"提升或降低Windows"的框
我有一个32位和64位版本的dll.我的.NET WinForm配置为"任何CPU",我的老板不会让我们为不同的操作系统版本单独安装.所以我想知道:如果我在安装中打包两个dll,那么有没有办法让WinForm确定它的64位/ 32位并加载正确的dll.
我发现这篇文章用于确定版本.但我不知道如何注入正确的方法来定义我想要使用的方法的DLLImport属性.有任何想法吗?