PDA

View Full Version : سوال: کمکم کنین: BackgroundWorker من درست کار نمیکنه. کی بلده؟



haniyehghassami
پنج شنبه 19 آبان 1390, 10:45 صبح
سلام
مشکل اولم اینه که BackgroundWorker خیلی رنگش کمه و کامل پر نمیشه و مثل حالتی هست که مثلا داریم یه فایل را کپی اولش progressBar رنگش کم رنگ هست که مینویسه (preparing to copy) و اصلا پر رنگ نمیشه

مشکل دومم هم اینه که کاری که تو متد DO Workesh گذاشتم انجام نمیده.میشخ کمکم کنین؟؟؟؟؟؟:عصبانی++::گریه:



public Frm_main()
{
InitializeComponent();
this.main_menu.Size = new Size(this.main_menu.Size.Width, 37);
progressBar1.Visible = true;
progressBar1.Style = ProgressBarStyle.Marquee;
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_Prog ressChanged);
backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_R unWorkerCompleted);
}



private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_POTSModem");
conected_ports = new string[5];
string name, com, deviceid;
com_port = new string[5, 3];
int count_row = 0, count_port = 0;
SerialPort port = new SerialPort();
int radif = 0;

string[] portname = SerialPort.GetPortNames();

//.........................برای یافتن تمام پورت های کام
foreach (ManagementObject mo in mos.Get())
{
//................برای اینکه تنها 5 مودم را ساپورت کنیم
if (count_row > 5)
{
break;
}
deviceid = mo["DeviceID"].ToString();
com = mo["AttachedTo"].ToString();
name = mo["Name"].ToString();

//.......................برای تفکیک مودم های داخلی از خارجی
string[] type = deviceid.Split('\\');
if (type[0] == "PCI" || type[0] == "pci")
;
else
{
//...............برای پر کردن ارایه که شامل مشخصات مودم است
if (portname.Contains(com))
{
com_port[count_row, 0] = deviceid;
com_port[count_row, 1] = com;
com_port[count_row, 2] = name;
count_row++;
}
}
}
portname = new string[5];
for (int i = 0; i < portname.Length; i++)
{
if (com_port[i, 1] != null)
portname[i] = com_port[i, 1];
}

//........................برای مهلت دادن به پورت ها
Thread.Sleep(5000);
timer1.Start();
//.....................برای نمایش مودم ها
dg_gsm_modem.Columns[0].HeaderText = "انتخاب مودم";

dg_gsm_modem.Columns[1].HeaderText = "ردیف";
dg_gsm_modem.Columns[2].HeaderText = "نام دستگاه";
dg_gsm_modem.Columns[3].HeaderText = "پورت";
dg_gsm_modem.Columns[4].HeaderText = "کد دستگاه";
//........................برای چک کردن اتصال یا عدم اتصال جی اس ام
for (int i = 0; i < portname.Length; i++)
{
if (portname[i] == null)
break;

port.PortName = portname[i];
if (!port.IsOpen)
{
try
{

port.Open();
//............برای برقراری ارتباط با ج اس ام مودم
port.Write("AT+CBC \r\n");
string s = port.ReadExisting();
if (s.Contains("OK"))
{
radif++;
conected_ports[count_port] = com_port[i, 1];
dg_gsm_modem.Rows.Add(null, (radif).ToString(), com_port[i, 0], com_port[i, 1], com_port[i, 2]);
backgroundWorker1.ReportProgress(portname.Length );
count_port++;
}
else

port.Close();


}
catch
{
continue;
}

}
port.Close();
}
timer1.Stop();
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;

}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
progressBar1.Value = progressBar1.Maximum;
progressBar1.Visible = false;
}

haniyehghassami
پنج شنبه 19 آبان 1390, 11:00 صبح
کسی کمکم نمیکنه؟
بهم این خطا را میده:


Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on.

hi level hdd
پنج شنبه 19 آبان 1390, 13:24 عصر
سلام.
برنامتونو کامپایل کنید و بعد برنامه رو از فولدر bin در جایی که برنامتون ایجاد شده اجرا کنید
یعنی مثلا برنامتون توی داکیومنت -> ویژوال استدیو -> و نام فولدر برنامتون هست
داخل این فودر شده به پوشه bin برید و برنامه رو از اونجا اجرا کنید

electro_esma
پنج شنبه 19 آبان 1390, 14:01 عصر
با سلام دوست من

به این لینک یه نگاه بنداز .

لینک (http://barnamenevis.org/showthread.php?272822-Cross-thread-operation-not-valid-error)