Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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# 更新后台工作程序winforms中的标签文本_C#_Winforms_Backgroundworker - Fatal编程技术网

C# 更新后台工作程序winforms中的标签文本

C# 更新后台工作程序winforms中的标签文本,c#,winforms,backgroundworker,C#,Winforms,Backgroundworker,我正在使用BackGroundWorker类在sqlserver中插入一些值。我在这里有for循环来插入值。我正在使用以下代码 public void bw_Convert_DoWork(object sender, DoWorkEventArgs e) { e.Result = e.Argument; for (int i = 0; i < fTable.Rows.Count; i++) {

我正在使用BackGroundWorker类在sqlserver中插入一些值。我在这里有for循环来插入值。我正在使用以下代码

 public void bw_Convert_DoWork(object sender, DoWorkEventArgs e)
    {           
        e.Result = e.Argument;
        for (int i = 0; i <  fTable.Rows.Count; i++)
        {
            try
            {
                SqlCommand cmd = new SqlCommand("INSERT INTO TBL_CDR_ANALYZER (LNG_UPLOAD_ID, DAT_START, LNG_DURATION, INT_DIRECTION, INT_CALL_DATA_TYPE, \n" +
                    "TXT_TARGET_NUMBER, TXT_OTHER_PARTY_NUMBER, TXT_TARGET_IMSI, TXT_TARGET_IMEI, TXT_TARGET_CELL_ID, TXT_ROAMING_NETWORK_COMPANY_NAME) VALUES \n" +
                    "(@UPLOAD_ID, @START_DATE, @DURATION, @DIRECTION, @CALL_TYPE, @TARGET_NUMBER, @OTHER_PARTY_NUMBER, @IMSI, @IMEI, @CELL_ID, @ROAMING_NAME)", sqlCon);
                cmd.Parameters.Add("@UPLOAD_ID", SqlDbType.Int).Value = 1;
                cmd.Parameters.Add("@START_DATE", SqlDbType.DateTime).Value = fTable.Rows[i]["CallDate"];
                cmd.Parameters.Add("@DURATION", SqlDbType.Int).Value = fTable.Rows[i]["CallDuration"];
                cmd.Parameters.Add("@DIRECTION", SqlDbType.Int).Value = GetCallDirection(fTable.Rows[i]["CallDirection"].ToString());
                cmd.Parameters.Add("@CALL_TYPE", SqlDbType.Int).Value = GetCallType(fTable.Rows[i]["CallType"].ToString());
                cmd.Parameters.Add("@TARGET_NUMBER", SqlDbType.VarChar, 25).Value = fTable.Rows[i]["TargetNo"];
                cmd.Parameters.Add("@OTHER_PARTY_NUMBER", SqlDbType.VarChar, 25).Value = fTable.Rows[i]["OtherPartyNo"];
                cmd.Parameters.Add("@IMSI", SqlDbType.VarChar, 50).Value = fTable.Rows[i]["IMSI"];
                cmd.Parameters.Add("@IMEI", SqlDbType.VarChar, 50).Value = fTable.Rows[i]["IMEI"];
                cmd.Parameters.Add("@CELL_ID", SqlDbType.VarChar, 50).Value = fTable.Rows[i]["CellID"];
                cmd.Parameters.Add("@ROAMING_NAME", SqlDbType.NVarChar, 255).Value = fTable.Rows[i]["RoamingCompany"];
                sqlCon.Open();
                cmd.ExecuteNonQuery();
                sqlCon.Close();
            }
            catch (SqlException ex)
            {

            }
            finally
            {
                sqlCon.Close();
            }
            bw_Convert.ReportProgress((100 * i) / fTable.Rows.Count);  
            **Label1.Text = i.ToString() + "Files Converted";** // getting error Here.                  
        }    
    }
public void bw\u Convert\u DoWork(对象发送方,DoWorkEventArgs e)
{           
e、 结果=e.参数;
对于(int i=0;i

如何在此处更新Label1文本

这应该可以从后台线程更改GUI

Label1.Invoke((MethodInvoker)delegate {
   Label1.Text = i.ToString() + "Files Converted";});

您无法访问像DoWork方法中的标签这样的UI界面对象。
DoWork在与UI元素不同的线程上运行。
您需要通过ProgressChanged事件或调用委托来更新接口

首先将BackgroundWorker的
WorkerReportsProgress
属性设置为True, 然后,调用
ReportProgress
方法将引发事件
ProgressChanged
,该事件将在界面元素的同一线程中运行

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
     Label1.Text = e.ProgressPercentage.ToString();
}

您必须实现ProgressChanged事件

private void bw_Convert_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
   //The progress in percentage
   int progress = e.ProgressPercentage;
   //A custom-value you can pass by calling ReportProgress in DoWork
   object obj = e.UserState;
}

//您也可以尝试更新您的标签

this.Invoke(new MethodInvoker(delegate 
          {
             Label1.Text = i.ToString() + "Files Converted";
          }));

我也有同样的问题。我已经在Progress Changed Background Worker事件中,但即使使用上述两个版本的方法调用程序也没有帮助。然后我尝试了这个,它成功了:

 lblCount.Text = string.Format("Total Directories: {0} Total Files: {1}", TotalDirectories, TotalFiles);
 lblCount.Update();

您还可以使用UserState传递来自执行代码的自定义消息