小编ric*_*ard的帖子

什么是WMI的非行话定义?

我一直在阅读有关WMI的内容,并尝试了解它是什么,但这看起来像是很多行话和循环定义.

这里:Windows Management Instrumentation (WMI) is the infrastructure for management data and operations on Windows-based operating systems.

一个"基础设施"?咦?

它只是操作系统中用于访问系统资源和设备的一些钩子吗?什么?如果是这样,它是由什么组成的?这些COM类是?

什么是WMI?

.net wmi terminology

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

如何在堆栈跟踪转储中获取变量值?

我维护一个应用程序,当应用程序发生错误时,它会向我发送一封电子邮件.我将堆栈跟踪转储到电子邮件中,似乎工作正常.唯一缺少的是变量的.我得到了所有的调用等等,从来没有任何变量.为了将这些变量值转储到电子邮件中,我还缺少什么?

下面是我用来将其转储到电子邮件中的代码:

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方法是进行此电子邮件调用的方法.它不知道导致异常的方法的变量或参数是什么.

.net c# variables stack-trace

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

COM字符串(BSTR)和.NET字符串之间有什么区别?

它只是字节组合以"编码"数据的方式吗?

我很好奇,因为我想知道RCW如何自动获取.NET字符串并将其转换为COM BSTR.我猜它只是形成一个从.NET字符串转换而来的有效COM BSTR.

相关:我可以使用.NET中的字节类型构建自己的有效BSTR吗?

.net string com rcw

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

使用委托是异步调用方法是最佳做法吗?

这篇msdn文章题为"如何异步调用Visual C#方法".

文章说"使用代理进行异步调用",我在脑海中回答"不一定,这只是一种方法".

文章陈述的事实基调使我感到奇怪 - 在进行异步调用时使用委托是最佳实践,还是MS认为这是最佳实践?

.net c# delegates asynchronous

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

为什么(非泛型)Stack类实现为循环缓冲区?(这究竟是什么意思)?

非泛型Stack类声明"Stack实现为循环缓冲区".

我不明白循环缓冲区在Stack用例中的应用.我也不明白如何将堆栈实现为循环缓冲区.

维基百科说:

循环缓冲区的有用属性是它不需要在消耗一个缓冲区时使其元素混乱.(如果使用非循环缓冲区,那么当消耗一个元素时,有必要移动所有元素.)换句话说,循环缓冲区非常适合作为FIFO缓冲区,而标准的非循环缓冲区非常适合作为 FIFO缓冲区.一个LIFO缓冲区.

循环缓冲具有固定最大大小的队列提供了良好的实现策略.

那么......如何将堆栈实现为循环缓冲区,为什么?

.net stack circular-buffer

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

最好的做法是将所有类标记为密封,除非您打算明确继承它们?

将类标记为密封似乎可以获得一些真正的好处:

  1. 某些情况下的性能
  2. 其他特殊情况下的编译时类型安全密封类的显式转换失败
  3. 防止类的意外继承

而且缺点似乎相对较少......您可以在不破坏代码的情况下解封一个类,但是您以后无法在不破坏代码的情况下密封一个已解封的类。

最好的做法是始终将类标记为密封,除非您打算继承它?为什么或者为什么不?

关于这个主题还有其他评论或指导吗?

c# oop sealed

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

在闭包中,是什么触发了捕获变量的新实例?

我正在深入阅读Jon Skeet的C#.

在页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)

c# closures

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

Asp.NET MVC - DataAnnotations和ModelState.IsValid是否过于侵入域模型?

我正在从Pro ASP.NET MVC 4这本书中学习ASP.NET MVC (顺便说一下,我喜欢这个版本).

我还在开头的章节中,它向我展示了System.ComponentModel.DataAnnotations命名空间属性,如何使用这些注释来模拟我的模型类,然后如何使用它们来检查模型是否有效(ModelState.IsValidController)中.

例如:

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)

有几件事让我感到不安.

  1. 为什么我想要在我的域模型中散布一堆属性?我喜欢我的域模型纯粹而且没有任何特定于实现的东西,并且任何真实世界模型都太复杂而不能像这样使用声明性验证.
  2. ErrorMessage验证属性的参数是否有些View相关?不是那样的东西属于UI图层吗?例如...如果由于空间限制我想要移动版本而不是说"请输入你的名字"说"需要姓名"怎么办?但这是我的模特!
  3. 为什么我要用来ModelState.IsValid确定模型的状态?模特不应该告诉我吗?据我所知,ModelState是利用了的DataAnnotations那个属性在我的模型,但是这似乎也只是非常简单的型号.更复杂的模型甚至可能没有有效/无效状态,它可能只有各种阶段和状态.我在这里散步,但我不喜欢以声明的方式说出是什么让我的模型有效或无效.

任何建议,保证或验证这些想法将不胜感激.

separation-of-concerns data-annotations asp.net-mvc-4 entity-framework-5

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

iCalendar数据库架构

我在哪里可以找到iCalendar数据库架构?我能找到的最好的是xml架构.

我可以使用它,但我认为这是很多工作,我希望有人已经完成了它.

icalendar database-schema

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

Fluent Nhibernate - 配置从UTC重新水化的所有日期

这个SO问题谈到"将流利的nhibernate配置的DateTime重新水化为Utc而不是未指定".

该问题后面的答案之一有:

Map(x => x.EntryDate).CustomType<UtcDateTimeType>();
Run Code Online (Sandbox Code Playgroud)

这适用于一个实体上的一个属性.

我想知道是否有一种方法可以指定所有日期时间属性都作为UTC存储在数据库中.

这是可能的,如果是的话,怎么样?

nhibernate configuration datetime utc fluent-nhibernate

5
推荐指数
2
解决办法
847
查看次数