Click here to Skip to main content
15,886,362 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
"invoke or begininvoke cannot be called on a control until the window handle has been created"

Am getting above exception rarely at the customer end. When debugging am not getting this exception.Please tell me where will be problem in below code.

On button click am starting thread
private void btn_export_consumer_details_Click(object sender, EventArgs e)
{
try
{
pbr_imp_consumer_data.Value = 0;
if (dgv_consumer_details.Rows.Count > 0)
{
th_import = new Thread(Import_Consumer_Data);
th_import.IsBackground = true;
th_import.Start();
}
else
{
MessageBox.Show("No consumer data found to import to BCS", "BCS", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
GlobalClass.Store_Exception_To_Log("frm_imp_consumer_details", "btn_export_consumer_details_Click()", ex);
}
}

Am getting exception in below function
private void Import_Consumer_Data()
{
try
{
this.Invoke(new Enable_Disable_Controls(Ena_Dis_Controls), new object[] { false });
GlobalClass.db.bcs_sqlite_cmd = new SQLiteCommand();
GlobalClass.db.bcs_sqlite_cmd.Connection = GlobalClass.db.bcs_sqlite_con;
SQLiteCommand bcs_sqlite_cmd2 = new SQLiteCommand();
SQLiteCommand bcs_sqlite_cmd1 = new SQLiteCommand();
bcs_sqlite_cmd3 = new SQLiteCommand();

bcs_sqlite_cmd1.Connection = GlobalClass.db.bcs_sqlite_con;
bcs_sqlite_cmd2.Connection = GlobalClass.db.bcs_sqlite_con;
bcs_sqlite_cmd3.Connection = GlobalClass.db.bcs_sqlite_con;
SQLiteDataReader bcs_sqlite_rdr;
string command_str1 = "";
string command_str2 = "";
string command_str3 = "";
string[] consumer_data_arr = new string[11];
double import_percentage = 0;
GlobalClass.do_this_for_all_existing_meters = false;
command_str1 = "INSERT INTO tblConsumerDetails(ConsumerID,ConsumerName,Address,MtrSrlNo,BU,PC,MR,Route,Sequence,DTCCode,MakeID) values(";
command_str1 += ":consumer_id,:consumer_name,:address,:mtr_srl_no,:bu,:pc,:mr,:route,:sequence,:dtc_code,:make_id)";
GlobalClass.db.bcs_sqlite_cmd.CommandText = command_str1;
GlobalClass.db.bcs_sqlite_cmd.Parameters.Add("consumer_id", DbType.String);
GlobalClass.db.bcs_sqlite_cmd.Parameters.Add("consumer_name", DbType.String);
GlobalClass.db.bcs_sqlite_cmd.Parameters.Add("address", DbType.String);
GlobalClass.db.bcs_sqlite_cmd.Parameters.Add("mtr_srl_no", DbType.String);
GlobalClass.db.bcs_sqlite_cmd.Parameters.Add("bu", DbType.String);
GlobalClass.db.bcs_sqlite_cmd.Parameters.Add("pc", DbType.Int32);
GlobalClass.db.bcs_sqlite_cmd.Parameters.Add("mr", DbType.String);
GlobalClass.db.bcs_sqlite_cmd.Parameters.Add("route", DbType.String);
GlobalClass.db.bcs_sqlite_cmd.Parameters.Add("sequence", DbType.String);
GlobalClass.db.bcs_sqlite_cmd.Parameters.Add("dtc_code", DbType.String);
GlobalClass.db.bcs_sqlite_cmd.Parameters.Add("make_id", DbType.Int32);

command_str2 = "INSERT INTO tblDevice(MtrSrlNo,Make,NetID,JobID,Commissioned,MACID,DeviceType,DownloadStatus,Password,IsPassword,IsMDReset,IsTODReset,IsRTC,JobPassword,TODValue) VALUES(";
command_str2 += ":mtr_sl_no,:make_id,:net_id,:job_id,:commissioned,:mac_id,:dev_type,:down_sts,:pwd,:is_pwd,:is_mdreset,:is_todreset,:is_rtc,:job_pwd,:tod_val)";
bcs_sqlite_cmd1.CommandText = command_str2;
bcs_sqlite_cmd1.Parameters.Add("mtr_sl_no", DbType.String);
bcs_sqlite_cmd1.Parameters.Add("make_id", DbType.Int32);
bcs_sqlite_cmd1.Parameters.Add("net_id", DbType.Int32);
bcs_sqlite_cmd1.Parameters.Add("job_id", DbType.Int32);
bcs_sqlite_cmd1.Parameters.Add("commissioned", DbType.String);
bcs_sqlite_cmd1.Parameters.Add("mac_id", DbType.String);
bcs_sqlite_cmd1.Parameters.Add("dev_type", DbType.String);
bcs_sqlite_cmd1.Parameters.Add("down_sts", DbType.String);
bcs_sqlite_cmd1.Parameters.Add("pwd", DbType.String);
bcs_sqlite_cmd1.Parameters.Add("is_pwd", DbType.String);
bcs_sqlite_cmd1.Parameters.Add("is_mdreset", DbType.String);
bcs_sqlite_cmd1.Parameters.Add("is_todreset", DbType.String);
bcs_sqlite_cmd1.Parameters.Add("is_rtc", DbType.String);
bcs_sqlite_cmd1.Parameters.Add("job_pwd", DbType.String);
bcs_sqlite_cmd1.Parameters.Add("tod_val", DbType.String);


string make_code = "", mtr_srl_no = "";//macid_header = "", macid_mslno = "",

SQLiteTransaction transaction = GlobalClass.db.bcs_sqlite_con.BeginTransaction();

for (int row = 0; row < dgv_consumer_details.Rows.Count; row++)
{
mtr_srl_no = dgv_consumer_details.Rows[row].Cells[METER_SERIAL_NUMBER_INDEX].Value.ToString().PadLeft(8, '0');
if (dgv_consumer_details.Rows[row].DefaultCellStyle.BackColor == Color.Red)//duplicate record so dont insert again
{
GlobalClass.duplicate_consumer_count++;
GlobalClass.invalid_mtr_srlno = mtr_srl_no;
GlobalClass.non_import_row_val = row;
GlobalClass.Store_Non_imported_Meter_Details(GlobalClass.bcs_non_imp_filename, "Duplicate Meter Serial Number : " + GlobalClass.invalid_mtr_srlno + " ------ > Row Value : " + GlobalClass.non_import_row_val, true);
continue;
}
make_code = dgv_consumer_details.Rows[row].Cells[MAKE_CODE_INDEX].Value.ToString().Trim();
if (mtr_srl_no != "")
{
//checks meter details alreay exists in BCS
command_str3 = "SELECT * FROM tblConsumerDetails WHERE MtrSrlNo='" + mtr_srl_no + "'";// AND MakeID=" + make_code;
bcs_sqlite_cmd2.CommandText = command_str3;
bcs_sqlite_rdr = bcs_sqlite_cmd2.ExecuteReader();
if (bcs_sqlite_rdr.Read())
{
bcs_sqlite_rdr.Close();
if (GlobalClass.do_this_for_all_existing_meters == true)
{
if (GlobalClass.consumer_info_already_exists_opt == GlobalClass.Consumer_Info_Already_Exists_Option.SKIP_CONSUMER_INFO)
{
import_percentage = ((double)row / GlobalClass.total_mtr_count) * 100;
this.BeginInvoke(new Update_Progress_Value(Update_Prog_Val), new object[] { import_percentage });
GlobalClass.skipped_consumer_count++;
continue;
}
//else if (GlobalClass.consumer_info_already_exists_opt == GlobalClass.Consumer_Info_Already_Exists_Option.OVERWRITE_CONSUMER_INFO)
// goto overwrite_consumer;
}
else
{
GlobalClass.exists_meter = mtr_srl_no;
frm_meter_already_exists frm = new frm_meter_already_exists();
frm.ShowDialog();
if (GlobalClass.consumer_info_already_exists_opt == GlobalClass.Consumer_Info_Already_Exists_Option.SKIP_CONSUMER_INFO)
{
GlobalClass.skipped_consumer_count++;
continue;
}
else if (GlobalClass.consumer_info_already_exists_opt == GlobalClass.Consumer_Info_Already_Exists_Option.STOP_IMPORTING)
break;
}
//overwrite_consumer:
consumer_data_arr[0] = dgv_consumer_details.Rows[row].Cells[CONSUMER_NUMBER_INDEX].Value.ToString();
consumer_data_arr[1] = dgv_consumer_details.Rows[row].Cells[CONSUMER_NAME_INDEX].Value.ToString().Replace("'", string.Empty);
consumer_data_arr[2] = dgv_consumer_details.Rows[row].Cells[CONSUMER_ADDRESS_INDEX].Value.ToString().ToString().Replace("'", string.Empty); ;
consumer_data_arr[3] = mtr_srl_no;
consumer_data_arr[4] = dgv_consumer_details.Rows[row].Cells[BU_INDEX].Value.ToString();
consumer_data_arr[5] = dgv_consumer_details.Rows[row].Cells[PC_INDEX].Value.ToString();
consumer_data_arr[6] = dgv_consumer_details.Rows[row].Cells[MR_INDEX].Value.ToString();
consumer_data_arr[7] = dgv_consumer_details.Rows[row].Cells[ROUTE_INDEX].Value.ToString();
consumer_data_arr[8] = dgv_consumer_details.Rows[row].Cells[SEQUENCE_INDEX].Value.ToString();
consumer_data_arr[9] = dgv_consumer_details.Rows[row].Cells[DTC_CODE_INDEX].Value.ToString();
consumer_data_arr[10] = make_code;
Overwrite_Existing_Meter(consumer_data_arr);
import_percentage = ((double)row / GlobalClass.total_mtr_count) * 100;
this.BeginInvoke(new Update_Progress_Value(Update_Prog_Val), new object[] { import_percentage });
continue;
}
bcs_sqlite_rdr.Close();

//validating meter serial number
try
{
int temp = Convert.ToInt32(mtr_srl_no);
}
catch (Exception)
{
GlobalClass.invalid_mtr_srlno = mtr_srl_no;
GlobalClass.non_import_row_val = row;
GlobalClass.non_imported_count++;
GlobalClass.Store_Non_imported_Meter_Details(GlobalClass.bcs_non_imp_filename, "Invalid Meter Serial Number : " + GlobalClass.invalid_mtr_srlno + " ------ > Row Value : " + GlobalClass.non_import_row_val, true);
MessageBox.Show("Meter serial number not valid : " + mtr_srl_no, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
continue;
}


//adding to tblConsumerDetails
GlobalClass.db.bcs_sqlite_cmd.Parameters["consumer_id"].Value = dgv_consumer_details.Rows[row].Cells[CONSUMER_NUMBER_INDEX].Value;
GlobalClass.db.bcs_sqlite_cmd.Parameters["consumer_name"].Value = dgv_consumer_details.Rows[row].Cells[CONSUMER_NAME_INDEX].Value.ToString().Replace("'", string.Empty);
GlobalClass.db.bcs_sqlite_cmd.Parameters["address"].Value = dgv_consumer_details.Rows[row].Cells[CONSUMER_ADDRESS_INDEX].Value.ToString().Replace("'", string.Empty);
GlobalClass.db.bcs_sqlite_cmd.Parameters["mtr_srl_no"].Value = mtr_srl_no;
GlobalClass.db.bcs_sqlite_cmd.Parameters["bu"].Value = dgv_consumer_details.Rows[row].Cells[BU_INDEX].Value;
GlobalClass.db.bcs_sqlite_cmd.Parameters["pc"].Value = dgv_consumer_details.Rows[row].Cells[PC_INDEX].Value;
GlobalClass.db.bcs_sqlite_cmd.Parameters["mr"].Value = dgv_consumer_details.Rows[row].Cells[MR_INDEX].Value;
GlobalClass.db.bcs_sqlite_cmd.Parameters["route"].Value = dgv_consumer_details.Rows[row].Cells[ROUTE_INDEX].Value;
GlobalClass.db.bcs_sqlite_cmd.Parameters["sequence"].Value = dgv_consumer_details.Rows[row].Cells[SEQUENCE_INDEX].Value;
GlobalClass.db.bcs_sqlite_cmd.Parameters["dtc_code"].Value = dgv_consumer_details.Rows[row].Cells[DTC_CODE_INDEX].Value;
GlobalClass.db.bcs_sqlite_cmd.Parameters["make_id"].Value = make_code;
//GlobalClass.db.bcs_sqlite_cmd.CommandText = command_str1;
GlobalClass.db.bcs_sqlite_cmd.ExecuteNonQuery();

/* macid_mslno = int.Parse(dgv_consumer_details.Rows[row].Cells["METER SERIAL NUMBER"].Value.ToString()).ToString("X").PadLeft(8, '0');
if (make_code == "76")//HPL
{
macid_header = "3CC1F601";
}
else if (make_code == "82")//Palmohan
{
//macid_header = "00124B00";
//macid_header = "3CC1F60A";
macid_header = "0";
macid_mslno = "";
}
else if (make_code == "58")//Rolex
{
macid_header = "3CC1F604";
}
else if (make_code == "53")//L&T
{
macid_header = "3CC1F603";
}*/
//adding to tblDevice
bcs_sqlite_cmd1.Parameters["mtr_sl_no"].Value = mtr_srl_no;
bcs_sqlite_cmd1.Parameters["make_id"].Value = dgv_consumer_details.Rows[row].Cells[MAKE_CODE_INDEX].Value;
bcs_sqlite_cmd1.Parameters["net_id"].Value = "0";
bcs_sqlite_cmd1.Parameters["job_id"].Value = "0";
bcs_sqlite_cmd1.Parameters["commissioned"].Value = "0";
bcs_sqlite_cmd1.Parameters["mac_id"].Value = "0"; //macid_header + macid_mslno;
bcs_sqlite_cmd1.Parameters["dev_type"].Value = "0";
bcs_sqlite_cmd1.Parameters["down_sts"].Value = "0";
if (make_code == "58")//Rolex
{
mtr_srl_no = dgv_consumer_details.Rows[row].Cells[METER_SERIAL_NUMBER_INDEX].Value.ToString();//no padleft
}
bcs_sqlite_cmd1.Parameters["pwd"].Value = mtr_srl_no;
bcs_sqlite_cmd1.Parameters["is_pwd"].Value = "0";
bcs_sqlite_cmd1.Parameters["is_mdreset"].Value = "0";
bcs_sqlite_cmd1.Parameters["is_todreset"].Value = "0";
bcs_sqlite_cmd1.Parameters["is_rtc"].Value = "0";
bcs_sqlite_cmd1.Parameters["job_pwd"].Value = "0";
bcs_sqlite_cmd1.Parameters["tod_val"].Value = "0";
//bcs_sqlite_cmd1.CommandText = command_str2;
bcs_sqlite_cmd1.ExecuteNonQuery();
GlobalClass.newly_imported_consumer_count++;
}
import_percentage = ((double)row / GlobalClass.total_mtr_count) * 100;
this.BeginInvoke(new Update_Progress_Value(Update_Prog_Val), new object[] { import_percentage });
}
//transaction.Commit();
GlobalClass.db.bcs_sqlite_cmd.Parameters.Clear();
bcs_sqlite_cmd1.Parameters.Clear();

//to create new networks if required
int global_device_cnt = 0, max_free_network = 0, max_existing_nw_id = 0, new_free_nw = 0;
string real_bcs_id = "00FEFE";

//get bcsid which is used as a part of extended pan id
command_str1 = "SELECT BcsId FROM tblBCSMaster";
GlobalClass.db.bcs_sqlite_cmd.CommandText = command_str1;
bcs_sqlite_rdr = GlobalClass.db.bcs_sqlite_cmd.ExecuteReader();
if (bcs_sqlite_rdr.Read())
{
real_bcs_id = bcs_sqlite_rdr[0].ToString().Substring(4).PadLeft(6, '0'); ;
}
bcs_sqlite_rdr.Close();

//get global meters count
command_str1 = "SELECT COUNT(MtrSrlNo) FROM tblDevice WHERE Commissioned=0";
GlobalClass.db.bcs_sqlite_cmd.CommandText = command_str1;
bcs_sqlite_rdr = GlobalClass.db.bcs_sqlite_cmd.ExecuteReader();
if (bcs_sqlite_rdr.Read())
{
global_device_cnt = int.Parse(bcs_sqlite_rdr[0].ToString());
}
bcs_sqlite_rdr.Close();

//get availabe free network
command_str1 = "SELECT COUNT(NetId) FROM tblNetworkLog WHERE JobId=0";
GlobalClass.db.bcs_sqlite_cmd.CommandText = command_str1;
bcs_sqlite_rdr = GlobalClass.db.bcs_sqlite_cmd.ExecuteReader();
if (bcs_sqlite_rdr.Read())
{
max_free_network = int.Parse(bcs_sqlite_rdr[0].ToString());
}
bcs_sqlite_rdr.Close();

//get maximum existing network id
command_str1 = "SELECT MAX(NetId) FROM tblNetworkLog";
GlobalClass.db.bcs_sqlite_cmd.CommandText = command_str1;
bcs_sqlite_rdr = GlobalClass.db.bcs_sqlite_cmd.ExecuteReader();
if (bcs_sqlite_rdr.Read())
{
if (bcs_sqlite_rdr[0].ToString() != "")
max_existing_nw_id = int.Parse(bcs_sqlite_rdr[0].ToString());
}
bcs_sqlite_rdr.Close();

if (global_device_cnt < 100 && max_free_network < 100)
{
new_free_nw = global_device_cnt * 2;
}
else
{
if (max_free_network <= (global_device_cnt / 4))
{
new_free_nw = (global_device_cnt / 4);
}
}

string new_ext_pan = "";
int val = 0;
var ran = new Random(max_existing_nw_id);
//transaction = GlobalClass.db.bcs_sqlite_con.BeginTransaction();

for (int fn_ind = 0; fn_ind < new_free_nw; fn_ind++)
{
bool found_new_pan = false;
do
{
val = ran.Next(max_existing_nw_id, 99999999);
new_ext_pan = "4C" + real_bcs_id + val.ToString("X").PadLeft(8, '0');//4D->M(Melenage)
command_str1 = "SELECT ExtPan FROM tblNetworkLog WHERE ExtPan='" + new_ext_pan + "'";
GlobalClass.db.bcs_sqlite_cmd.CommandText = command_str1;
bcs_sqlite_rdr = GlobalClass.db.bcs_sqlite_cmd.ExecuteReader();
if (!bcs_sqlite_rdr.Read())
found_new_pan = true;
bcs_sqlite_rdr.Close();
} while (found_new_pan == false);
max_existing_nw_id++;
command_str2 = "INSERT INTO tblNetworkLog VALUES(" + max_existing_nw_id.ToString() + ",0,'" + new_ext_pan + "','" + new_ext_pan + new_ext_pan + "')";
GlobalClass.db.bcs_sqlite_cmd.CommandText = command_str2;
GlobalClass.db.bcs_sqlite_cmd.ExecuteNonQuery();
}

transaction.Commit();
GlobalClass.db.bcs_sqlite_cmd.Dispose();
bcs_sqlite_cmd1.Dispose();
bcs_sqlite_cmd2.Dispose();
bcs_sqlite_cmd3.Dispose();
this.Invoke(new Enable_Disable_Controls(Ena_Dis_Controls), new object[] { true });
this.Invoke(new Update_Progress_Value(Update_Prog_Val), new object[] { 100 });
frm_import_details import_details = new frm_import_details();
import_details.ShowDialog();
if (File.Exists(GlobalClass.bcs_non_imp_filename))
Process.Start(GlobalClass.bcs_non_imp_filename);
//MessageBox.Show("Consumer details have been imported successfully to BCS", "BCS", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
GlobalClass.Store_Exception_To_Log("frm_imp_consumer_details", "Import_Consumer_Data()", ex);
}
}
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900