假设按订阅顺序调用事件订阅者是否安全?
例:
void One(object sender, EventArgs e) {}
void Two(object sender, EventArgs e) {}
event EventHandler foo;
foo += One;
foo += Two;
Run Code Online (Sandbox Code Playgroud)
当事件被触发时,One()总是在Two()之前调用吗?
编辑:
你应该不依赖它,我只是想.这个想法是,多播代表与COMMAND模式类似.所以我只是想知道.通常你会使用一个保存COMMAND命令的集合,这样你就可以做undo/redo/whatever.
希望我只是遗漏了一些明显的东西,但我试图了解Windows窗体中 Load和Shown事件之间的差异.
传统上,我只使用Load(或实际上是OnLoad,因为我认为覆盖一个方法比依靠设计者自己连接一个事件更干净),因为在所有版本的.NET中都可以使用它.使用.NET 2.0,引入了Shown事件.
现在,如果你在MSDN文档中查看这些描述("加载:第一次显示表单之前发生.","显示:每当表单首次显示时发生.")听起来像Load事件应该发生,然后表格应该可见,然后应该发生显示事件; 两者的结合使您可以在表格可见之前和之后执行某些任务.有道理,对吗?
但是,实验表明Shown事件总是发生在 Load事件之前,每当我尝试它时(两者都发生在表单变得可见之前).然而,当我发现一个关于这些事件被触发的命令的页面时,我在谷歌周围时,他们总是列出首先被触发的Load事件.
我只是疯了,还是我错过了什么?(如果它们确实在大约同一时间发生,那么为什么首先添加了已显示的事件?)
(我目前在显示表单之前和之后做某事的解决方案是使用OnLoad进行"显示之前"的操作并为"显示后"的东西启动一个短时间的一次性计时器.哪个工作正常且可靠,但是它有点难看,我希望有一个更清洁的解决方案.但看起来显示的事件不是它.)
如果我需要从4.0 CLR应用程序链接到2.0 CLR程序集(纯托管代码,没有混合模式问题),2.0代码是否在2.0 CLR或4.0上运行.
基本上,是否存在影响2.0代码的4.0破坏性更改的风险?
在发回参数时收到此错误
错误:必须在控制离开当前方法之前分配Out参数
代码是
public void GetPapers(string web, out int Id1, out int Id2)
{
SqlConnection conn = new SqlConnection(ConnectionString());
conn.Open();
SqlCommand cmd = new SqlCommand("GetPapers", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@URL", String(web)));
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.Read())
{
Id1 = (int)rdr["ID1"];
Id2 = (int)rdr["ID2"];
}
rdr.Close();
}
Run Code Online (Sandbox Code Playgroud)
称之为
GetPapers(web, out Id1, out Id2);
Run Code Online (Sandbox Code Playgroud)
与此问题相关
以下解决方案适用于.net核心1.1,但在从1.1升级到2.0后,我收到以下错误:
InvalidOperationException:无法为"Role"创建DbSet,因为此类型未包含在上下文的模型中.
当用户尝试登录并执行以下语句时:
var result = await _signInManager.PasswordSignInAsync(model.Email,
model.Password, model.RememberMe, lockoutOnFailure: false);
Run Code Online (Sandbox Code Playgroud)
怎么了?
User.cs
public partial class User : IdentityUser<Guid>
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
IdentityEntities.cs
public partial class UserLogin : IdentityUserLogin<Guid>
{
}
public partial class UserRole : IdentityUserRole<Guid>
{
}
public partial class UserClaim : IdentityUserClaim<Guid>
{
}
public partial class Role : IdentityRole<Guid>
{
public Role() : base()
{
}
public Role(string roleName)
{
Name = roleName;
}
}
public partial class RoleClaim …
Run Code Online (Sandbox Code Playgroud) 我希望在asp.net回发之后执行一个javascript函数,而不使用ajax.
我在偶数方法中尝试了以下方法但没有运气:
Page.ClientScript.RegisterStartupScript(GetType(), "ShowPopup", "showCheckOutPopIn('Livraison',556);");
Run Code Online (Sandbox Code Playgroud) 我正在尝试从C#,.NET 2.0调用存储过程(在SQL 2005服务器上)DateTime
作为a的值SqlParameter
.存储过程中的SQL类型是"datetime".
从SQL Management Studio执行sproc工作正常.但是每当我从C#调用它时,我都会收到有关日期格式的错误.
当我运行SQL事件探查器来监视调用时,我会复制粘贴exec
调用以查看正在发生的事情.这些是我对我尝试过的观察和注意事项:
1)如果我DateTime
直接作为a DateTime
或转换为传入SqlDateTime
,则该字段由单引号的PAIR包围,例如
@Date_Of_Birth=N''1/8/2009 8:06:17 PM''
Run Code Online (Sandbox Code Playgroud)
2)如果我将DateTime
in作为字符串传递,我只得到单引号
3)使用SqlDateTime.ToSqlString()
不会产生UTC格式的日期时间字符串(即使转换为通用时间后)
4)使用DateTime.ToString()
不会产生UTC格式的日期时间字符串.
5)手动设置DbType
为SqlParameter
to DateTime
不会改变上述观察结果.
那么,我的问题是,我是如何让C#通过正确格式化的时间SqlParameter
?当然这是一个常见的用例,为什么这么难以开始工作?我似乎无法转换DateTime
为SQL兼容的字符串(例如'2009-01-08T08:22:45')
编辑
RE:BFree,实际执行sproc的代码如下:
using (SqlCommand sprocCommand = new SqlCommand(sprocName))
{
sprocCommand.Connection = transaction.Connection;
sprocCommand.Transaction = transaction;
sprocCommand.CommandType = System.Data.CommandType.StoredProcedure;
sprocCommand.Parameters.AddRange(parameters.ToArray());
sprocCommand.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
详细了解我的尝试:
parameters.Add(new SqlParameter("@Date_Of_Birth", DOB));
parameters.Add(new SqlParameter("@Date_Of_Birth", DOB.ToUniversalTime()));
parameters.Add(new SqlParameter("@Date_Of_Birth",
DOB.ToUniversalTime().ToString()));
SqlParameter param = new SqlParameter("@Date_Of_Birth", …
Run Code Online (Sandbox Code Playgroud) 我有一个DataTable
我想要推送到DB.我希望能够说出来
myDataTable.update();
Run Code Online (Sandbox Code Playgroud)
但在阅读MSDN 文档后,显然这确实是逐行插入的.
应该注意的是,这些陈述不是作为批处理执行的; 每行都单独更新.
我有什么选择?
编辑:我正在使用SQL Server 2005
不知道我是否有"厚厚的一天" - 但我只是想知道这里最好的路线是什么.
语境:
我有一个字段列表,我想用它们存储别名(我使用的是.NET 2.0 BTW),例如
所以它本质上是一对字符串:
参考,参考
社区,社区
邮编:POST_CODE
...而且我认为为这样的事情继续创建对象似乎太过分了,所以我应该创建一个StringDictionary并以这种方式存储值,即使我不使用StringDictionary类的任何功能我并不担心键值对关联等问题 - 我只是想保留一对字符串.
任何帮助/指针都会很棒.
我有一些产生无限循环的代码.现在我需要编写一个在大约200ms后失败的测试.200ms将指示代码处于无限循环中.
例如:
public void CodeUnderTest()
{
while(true)
{
}
}
Run Code Online (Sandbox Code Playgroud) .net-2.0 ×10
c# ×8
.net ×3
asp.net ×2
events ×2
.net-4.0 ×1
asp.net-mvc ×1
c#-2.0 ×1
clr ×1
collections ×1
datetime ×1
mstest ×1
sql-server ×1
string ×1
unit-testing ×1
winforms ×1