Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取RunWorkerCompletedEventArgs对象的内容_C#_Wpf - Fatal编程技术网

C# 获取RunWorkerCompletedEventArgs对象的内容

C# 获取RunWorkerCompletedEventArgs对象的内容,c#,wpf,C#,Wpf,我正在返回一个RunWorkerCompletedEventArgs对象,并试图获取可以在该对象中看到的错误号。当我使用if(err.Number!=2627){}时,我得到以下错误 “对象”不包含“数字”的定义,也不包含扩展名 接受类型为“object”的第一个参数的方法“Number”可以是 找到(是否缺少using指令或程序集引用?) 请有人告诉我如何获取对象内容(见下面的即时窗口) 另外,请有人解释一下这里实际发生了什么,因为错误表明该对象不包含“Number”的定义,但它看起来确实存在

我正在返回一个
RunWorkerCompletedEventArgs
对象,并试图获取可以在该对象中看到的错误号。当我使用
if(err.Number!=2627){}
时,我得到以下错误

“对象”不包含“数字”的定义,也不包含扩展名 接受类型为“object”的第一个参数的方法“Number”可以是 找到(是否缺少using指令或程序集引用?)

请有人告诉我如何获取对象内容(见下面的即时窗口)

另外,请有人解释一下这里实际发生了什么,因为错误表明该对象不包含“Number”的定义,但它看起来确实存在

代码:

private void GBHworker_RunWorkerCompleted(object sender, 
             RunWorkerCompletedEventArgs e)
{
    //update UI once worker complete his work 
    if (e.Result != null)
    {
        var err = e.Result;
        if (err.Number!= 2627) //don't want to raise error on duplicate primary key
        {
            MessageBoxButton btn = MessageBoxButton.OK;
            var result = ModernDialog.ShowMessage(e.Result.ToString(), 
                         "Error", btn);
        }
    }
}
private void GBHworker_DoWork(object sender, DoWorkEventArgs e)
{

  //....DB parameter setup
  try
  {
    cmd_insert.ExecuteNonQuery();
  }
  catch (Exception crap)
  {
    if (e != null)
      e.Result = crap;
  }

 }
?err
{"Violation of PRIMARY KEY constraint 'PK_XYZ'. Cannot insert duplicate key in object 'dbo.XYZ. The duplicate key value is (30527293868).\r\nThe statement has been terminated."}
    base {System.Data.Common.DbException}: {"Violation of PRIMARY KEY constraint 'PK_XYZ'. Cannot insert duplicate key in object 'dbo.XYZ'. The duplicate key value is (30527293868).\r\nThe statement has been terminated."}
    Class: 14
    ClientConnectionId: {*******}
    Errors: {System.Data.SqlClient.SqlErrorCollection}
    LineNumber: 1
    Number: 2627
    Procedure: ""
    Server: "*******"
    Source: ".Net SqlClient Data Provider"
    State: 1
分配e:

private void GBHworker_RunWorkerCompleted(object sender, 
             RunWorkerCompletedEventArgs e)
{
    //update UI once worker complete his work 
    if (e.Result != null)
    {
        var err = e.Result;
        if (err.Number!= 2627) //don't want to raise error on duplicate primary key
        {
            MessageBoxButton btn = MessageBoxButton.OK;
            var result = ModernDialog.ShowMessage(e.Result.ToString(), 
                         "Error", btn);
        }
    }
}
private void GBHworker_DoWork(object sender, DoWorkEventArgs e)
{

  //....DB parameter setup
  try
  {
    cmd_insert.ExecuteNonQuery();
  }
  catch (Exception crap)
  {
    if (e != null)
      e.Result = crap;
  }

 }
?err
{"Violation of PRIMARY KEY constraint 'PK_XYZ'. Cannot insert duplicate key in object 'dbo.XYZ. The duplicate key value is (30527293868).\r\nThe statement has been terminated."}
    base {System.Data.Common.DbException}: {"Violation of PRIMARY KEY constraint 'PK_XYZ'. Cannot insert duplicate key in object 'dbo.XYZ'. The duplicate key value is (30527293868).\r\nThe statement has been terminated."}
    Class: 14
    ClientConnectionId: {*******}
    Errors: {System.Data.SqlClient.SqlErrorCollection}
    LineNumber: 1
    Number: 2627
    Procedure: ""
    Server: "*******"
    Source: ".Net SqlClient Data Provider"
    State: 1
即时窗口:

private void GBHworker_RunWorkerCompleted(object sender, 
             RunWorkerCompletedEventArgs e)
{
    //update UI once worker complete his work 
    if (e.Result != null)
    {
        var err = e.Result;
        if (err.Number!= 2627) //don't want to raise error on duplicate primary key
        {
            MessageBoxButton btn = MessageBoxButton.OK;
            var result = ModernDialog.ShowMessage(e.Result.ToString(), 
                         "Error", btn);
        }
    }
}
private void GBHworker_DoWork(object sender, DoWorkEventArgs e)
{

  //....DB parameter setup
  try
  {
    cmd_insert.ExecuteNonQuery();
  }
  catch (Exception crap)
  {
    if (e != null)
      e.Result = crap;
  }

 }
?err
{"Violation of PRIMARY KEY constraint 'PK_XYZ'. Cannot insert duplicate key in object 'dbo.XYZ. The duplicate key value is (30527293868).\r\nThe statement has been terminated."}
    base {System.Data.Common.DbException}: {"Violation of PRIMARY KEY constraint 'PK_XYZ'. Cannot insert duplicate key in object 'dbo.XYZ'. The duplicate key value is (30527293868).\r\nThe statement has been terminated."}
    Class: 14
    ClientConnectionId: {*******}
    Errors: {System.Data.SqlClient.SqlErrorCollection}
    LineNumber: 1
    Number: 2627
    Procedure: ""
    Server: "*******"
    Source: ".Net SqlClient Data Provider"
    State: 1

e.Result
转换为
DbException
怎么样

var exp=e.Result as DbException;

if(exp!=null){
    //NOW USE IT: exp.Number;
}
结果
的类型为
对象

编辑:-如果您按照@Habib的建议在
\u-DoWork
中删除try/catch,则使用以下代码,如他所示:

var err=e.Error as SqlException;
if(err!=null && err.Number ==2627)
{
    //....
}

e.Result
转换为
DbException
怎么样

var exp=e.Result as DbException;

if(exp!=null){
    //NOW USE IT: exp.Number;
}
结果
的类型为
对象

编辑:-如果您按照@Habib的建议在
\u-DoWork
中删除try/catch,则使用以下代码,如他所示:

var err=e.Error as SqlException;
if(err!=null && err.Number ==2627)
{
    //....
}

e.Result
转换为
DbException
怎么样

var exp=e.Result as DbException;

if(exp!=null){
    //NOW USE IT: exp.Number;
}
结果
的类型为
对象

编辑:-如果您按照@Habib的建议在
\u-DoWork
中删除try/catch,则使用以下代码,如他所示:

var err=e.Error as SqlException;
if(err!=null && err.Number ==2627)
{
    //....
}

e.Result
转换为
DbException
怎么样

var exp=e.Result as DbException;

if(exp!=null){
    //NOW USE IT: exp.Number;
}
结果
的类型为
对象

编辑:-如果您按照@Habib的建议在
\u-DoWork
中删除try/catch,则使用以下代码,如他所示:

var err=e.Error as SqlException;
if(err!=null && err.Number ==2627)
{
    //....
}

您不需要
Result
属性来获取异常详细信息,而是使用属性,因为您需要
SqlException
,所以将
错误
强制转换为
SqlException
,然后您可以检查
编号

if (e.Error != null)
{
   var error = e.Error as SqlException;
   if(eror != null && error.Number == 2627)
     {
      //duplicate key
     }
}

当前,由于
e.Result
的类型为
Object
,您必须将其强制转换为特定类型才能访问其属性,因此会出现错误

您不需要
结果
属性来获取异常详细信息,而是使用属性,因为您需要
SqlException
,所以将
错误
强制转换为
SqlException
,然后您可以检查
编号

if (e.Error != null)
{
   var error = e.Error as SqlException;
   if(eror != null && error.Number == 2627)
     {
      //duplicate key
     }
}

当前,由于
e.Result
的类型为
Object
,您必须将其强制转换为特定类型才能访问其属性,因此会出现错误

您不需要
结果
属性来获取异常详细信息,而是使用属性,因为您需要
SqlException
,所以将
错误
强制转换为
SqlException
,然后您可以检查
编号

if (e.Error != null)
{
   var error = e.Error as SqlException;
   if(eror != null && error.Number == 2627)
     {
      //duplicate key
     }
}

当前,由于
e.Result
的类型为
Object
,您必须将其强制转换为特定类型才能访问其属性,因此会出现错误

您不需要
结果
属性来获取异常详细信息,而是使用属性,因为您需要
SqlException
,所以将
错误
强制转换为
SqlException
,然后您可以检查
编号

if (e.Error != null)
{
   var error = e.Error as SqlException;
   if(eror != null && error.Number == 2627)
     {
      //duplicate key
     }
}

当前,由于
e.Result
的类型为
Object
,您必须将其强制转换为特定类型才能访问其属性,因此会出现错误

结果被定义为对象,所以这就是为什么在它上面看不到数字属性的原因。您需要先将其强制转换。您需要将其强制转换为指定的类型e。您需要在分配e的位置发布代码。Result定义为object,因此您无法在其上看到Number属性。您需要先将其强制转换。您需要将其强制转换为指定的类型e。您需要在分配e的位置发布代码。Result定义为object,因此您无法在其上看到Number属性。您需要先将其强制转换。您需要将其强制转换为指定的类型e。您需要在分配e的位置发布代码。Result定义为object,因此您无法在其上看到Number属性。您需要先将其强制转换。您需要将其强制转换为指定的类型e。您需要在分配e的位置发布代码。这对我不起作用,因为
e.Error
总是为我返回null?我给e赋值正确吗?(我已经添加了_doworkcode)@ooo,从
DoWork
中删除异常处理,如果发生任何异常,它将在
e.Error
中可用,在访问e.Result之前还要检查e.Cancelled和e.Error。这对我不起作用,因为
e.Error
总是为我返回null?我给e赋值正确吗?(我已经添加了_doworkcode)@ooo,从
DoWork
中删除异常处理,如果发生任何异常,它将在
e.Error
中可用,在访问e.Result之前还要检查e.Cancelled和e.Error。这对我不起作用,因为
e.Error
总是为我返回null?我给e赋值正确吗?(我已经添加了_doworkcode)@ooo,从
DoWork
中删除异常处理,如果发生任何异常,它将在
e.Error
中可用,在访问e.Result之前还要检查e.Cancelled和e.Error。这对我不起作用,因为
e.Error
总是为我返回null?我给e赋值正确吗?(我已经添加了_doworkcode)@ooo,从
DoWork
中删除异常处理,如果发生任何异常,它将在
e.Error
中可用,在访问e.Result之前还检查e.Cancelled和e.Error。