0

执行以下尝试捕获的更好方法是什么?目前,我在自己的 try catch 语句中拥有每个 WMI 字段。

我不想让整个班级陷入大规模的尝试中,因为我遇到了字段不显示任何内容的问题(尝试了这个并且对我正在做的事情不起作用)。

我有大约 25 个其他 WMI 字段需要输入,我想知道是否有更简单的方法来执行此操作?

private void cmbHdd_SelectedIndexChanged(object sender, EventArgs e)
ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Model = '" + cmbHdd.SelectedItem + "'");
foreach (ManagementObject moDisk in mosDisks.Get())
{
    try
    {
        lblSystemName.Text = "SystemName: " + moDisk["systemname"];
    }
    catch (Exception)
    {

        lblSystemName.Text = "SystemName: WMI Error"; ;
    }
    try
    {
        lblType.Text = "Type: " + moDisk["MediaType"].ToString();
    }
    catch (Exception) 
    {

        lblType.Text = "Type: WMI Error";
    }
}
4

3 回答 3

2

我认为当数据表中的给定列没有可用数据时会发生错误

if (moDisk.Columns.Contains("systemname"))
{
  lblSystemName.Text = "SystemName: " + moDisk["systemname"]; 
}
else 
{
   lblSystemName.Text = "SystemName: WMI Error";
}

注意:不确定这是否是数据表,但您可以像这样编写代码,而不是为每个值捕获异常……借助 if ..else 您可以轻松编写代码

于 2012-09-25T09:42:42.070 回答
2

您可以使用辅助方法:

private static string GetMOValue(ManagementObject mo, string name)
{
    try
    {
        object result = mo[name];
        return result == null ? "" : result.ToString();
    }
    catch(Exception)
    {
        return "WMI Error";
    }
}

...
lblSystemName.Text = GetMOValue(moDisk, "systemname");
lblType.Text = GetMOValue(moDisk, "MediaType");

请注意,您可能应该捕获更具体的异常(不确定 ManagementObject 索引器会引发哪些异常)。

于 2012-09-25T09:49:18.007 回答
1

我觉得用这么多try catch不好。如果我是 ui 会按照以下方法完成..如果真的需要 try catch。

private void cmbHdd_SelectedIndexChanged(object sender, EventArgs e)
ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Model = '" + cmbHdd.SelectedItem + "'");
string current=  string.Empty;
foreach (ManagementObject moDisk in mosDisks.Get())
{
    try
    {
        current = "SystemName";
        lblSystemName.Text = "SystemName: " + moDisk["systemname"];


        current = "MediaType";  
        lblType.Text = "Type: " + moDisk["MediaType"].ToString();

    }
    catch(Exception)

     {
            //print "error in" + current;

}
}
于 2012-09-25T09:47:54.800 回答