我一直在阅读有关WMI的内容,并尝试了解它是什么,但这看起来像是很多行话和循环定义.
这里:Windows Management Instrumentation (WMI) is the infrastructure for management data and operations on Windows-based operating systems.
一个"基础设施"?咦?
它只是操作系统中用于访问系统资源和设备的一些钩子吗?什么?如果是这样,它是由什么组成的?这些COM类是?
什么是WMI?
我维护一个应用程序,当应用程序发生错误时,它会向我发送一封电子邮件.我将堆栈跟踪转储到电子邮件中,似乎工作正常.唯一缺少的是变量的值.我得到了所有的调用等等,从来没有任何变量.为了将这些变量值转储到电子邮件中,我还缺少什么?
下面是我用来将其转储到电子邮件中的代码:
UtilityClass.SendEmail(shortNTID,
"admin@mydomain.com",
new string[] { "support@mydomain.com" },
"MyApplication error has occured for user: " +
shortNTID + " (Main).",
"Message: " + ex.Message.ToString() +
" Source: " + ex.Source.ToString() +
" Target Site: " + ex.TargetSite.ToString() +
" Stack Trace: " + ex.StackTrace.ToString());
Run Code Online (Sandbox Code Playgroud)
以下是电子邮件中的结果:
消息:指定的强制转换无效.来源:MyApplication目标站点:Void FindFormAndActivate(MyApplication.MDIParentForm,System.String,System.Object)堆栈跟踪:MyApplication.DtilityClass.FindFormAndActivate(MDIParentForm frmMDIParentForm,String formName,Object参数)MyApplication.DashboardAlerts.NavigateToAssignment()at MyApplication System.Windows上System.Windows.Forms.Control.WmMouseUp(Message&m,MouseButtons按钮,Int32单击)的System.Windows.Forms.Control.OnMouseClick(MouseEventArgs e)中的.DashboardAlerts.utAlerts_MouseClick(Object sender,MouseEventArgs e).在System.Windows.Fornd.NativeWindow的System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&m)的System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m)中的Forms.Control.WndProc(Message&m).回调(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)
编辑
有些答案建议我自己将变量值添加到电子邮件中.我怎么会得到这些价值呢?发送电子邮件的此代码段不在失败的方法中.这是在发生异常时运行的代码.如果没有处理和纠正异常,我会让它冒泡到线程的顶部,Application.ThreadException += new ThreadExceptionEventHandler(HandleError);并且该HandleError方法是进行此电子邮件调用的方法.它不知道导致异常的方法的变量或参数是什么.
它只是字节组合以"编码"数据的方式吗?
我很好奇,因为我想知道RCW如何自动获取.NET字符串并将其转换为COM BSTR.我猜它只是形成一个从.NET字符串转换而来的有效COM BSTR.
相关:我可以使用.NET中的字节类型构建自己的有效BSTR吗?
这篇msdn文章题为"如何异步调用Visual C#方法".
文章说"使用代理进行异步调用",我在脑海中回答"不一定,这只是一种方法".
文章陈述的事实基调使我感到奇怪 - 在进行异步调用时使用委托是最佳实践,还是MS认为这是最佳实践?
将类标记为密封似乎可以获得一些真正的好处:
而且缺点似乎相对较少......您可以在不破坏代码的情况下解封一个类,但是您以后无法在不破坏代码的情况下密封一个已解封的类。
最好的做法是始终将类标记为密封,除非您打算继承它?为什么或者为什么不?
关于这个主题还有其他评论或指导吗?
在页156,他有一个例子,清单5.13"捕获多个委托的多个变量实例".
List<ThreadStart> list = new List<ThreadStart>();
for(int index=0; index < 5; index++;)
{
int counter = index*10;
list.Add(delegate
{
Console.WriteLine(counter);
counter++;
}
);
}
foreach(ThreadStart t in list)
{
t();
}
list[0]();
list[0]();
list[0]();
list[1]();
Run Code Online (Sandbox Code Playgroud)
在此列表之后的解释中,他说"在这种情况下,每个委托实例都捕获了一个不同的变量."
我理解这一点很好,因为我理解每次你关闭一个变量时,编译器会生成IL,将其封装在一个新的类中,专门用于允许捕获该变量(实质上使它成为一个引用类型,以便它引用的值)不会被当前执行范围的堆栈框架破坏).
但后来他谈到了如果我们index直接捕获而不是创建counter变量会发生什么- "所有代表都会共享相同的变量".
这个我不明白.是不是index在同一范围内counter?为什么编译器也不会index为每个委托创建一个新实例?
注意:我想我在输入这个问题时想出来了,但我会在这里留下问题给后人.我认为答案index实际上是在不同的范围内counter.索引基本上是在for循环中"声明"...每次都是相同的变量.
看一下为for循环生成的IL ,它证明变量是在循环外声明的(length并且i是在for循环声明中声明的变量).
.locals init (
[0] int32 length,
[1] int32 …Run Code Online (Sandbox Code Playgroud) 我正在从Pro ASP.NET MVC 4这本书中学习ASP.NET MVC (顺便说一下,我喜欢这个版本).
我还在开头的章节中,它向我展示了System.ComponentModel.DataAnnotations命名空间属性,如何使用这些注释来模拟我的模型类,然后如何使用它们来检查模型是否有效(ModelState.IsValid在Controller)中.
例如:
public class GuestResponse
{
[Required(ErrorMessage = "Please enter your name"]
public string Name { get; set; }
}
...
public ViewResult RsvpForm(GuestResponse guestResponse)
{
if(ModelState.IsValid)
{
return View("Thanks", guestResponse);
}
}
Run Code Online (Sandbox Code Playgroud)
有几件事让我感到不安.
ErrorMessage验证属性的参数是否有些View相关?不是那样的东西属于UI图层吗?例如...如果由于空间限制我想要移动版本而不是说"请输入你的名字"说"需要姓名"怎么办?但这是我的模特!ModelState.IsValid确定模型的状态?模特不应该告诉我吗?据我所知,ModelState是利用了的DataAnnotations那个属性是在我的模型,但是这似乎也只是非常简单的型号.更复杂的模型甚至可能没有有效/无效状态,它可能只有各种阶段和状态.我在这里散步,但我不喜欢以声明的方式说出是什么让我的模型有效或无效.任何建议,保证或验证这些想法将不胜感激.
separation-of-concerns data-annotations asp.net-mvc-4 entity-framework-5
我在哪里可以找到iCalendar数据库架构?我能找到的最好的是xml架构.
我可以使用它,但我认为这是很多工作,我希望有人已经完成了它.
这个SO问题谈到"将流利的nhibernate配置的DateTime重新水化为Utc而不是未指定".
该问题后面的答案之一有:
Map(x => x.EntryDate).CustomType<UtcDateTimeType>();
Run Code Online (Sandbox Code Playgroud)
这适用于一个实体上的一个属性.
我想知道是否有一种方法可以指定所有日期时间属性都作为UTC存储在数据库中.
这是可能的,如果是的话,怎么样?
.net ×5
c# ×4
asynchronous ×1
closures ×1
com ×1
datetime ×1
delegates ×1
icalendar ×1
nhibernate ×1
oop ×1
rcw ×1
sealed ×1
stack ×1
stack-trace ×1
string ×1
terminology ×1
utc ×1
variables ×1
wmi ×1