PDA

View Full Version : مشکل در استفاده از پورت سریال



mir555
شنبه 10 بهمن 1388, 18:00 عصر
من تو یک پروژه دارم اطلاعات از پورت سریال می گیرم با استفاده از serialport خود vs و برای اینکه اطلاعاتو بخونم تو event مربوط به datarecived کد نوشتم و می خوام این اطلاعات دریافتی تو یک textbox بنویسم اطلاعات با استفاده از فرمان readline اطلاعات خوندم ولی زمانی که می خوام این اطلاعاتو تو یک لیبل بریزم به من پیام خطا میده که تو therad نمی تونی به اشیای فرم دسترسی پیدا کنی (حداقل من اینطوری پیامشو تفسیر کردم ) می خواستم بدونم باید چکار کرد

saied_genius
شنبه 10 بهمن 1388, 18:50 عصر
شما احتمالاً مي خواهيد از يک thread به اشياي thread ديگري دسترسي پيدا کنيد (cross threading) که در حالت عادي ممنوع است.

به سايت زير سر بزنيد شايد مشکلتون حل شود.

http://www.dreamincode.net/code/snippet3288.htm

mir555
شنبه 10 بهمن 1388, 19:14 عصر
ممنون از جوابتون دوست عزیز
ولی من دارم از reciveddata از شی serialport1 که روی فرمم هست استفاده می کنم

saied_genius
شنبه 10 بهمن 1388, 19:24 عصر
همانطور که در پست قبلی گفتم :

received data پورت سریال در یک thread دیگر اجرا می شود، بايد حتماً invoke شود تا قابل استفاده در thread ديگري باشد.

از کد زیر استفاده کنید (بر حسب نیازتان تغییر دهید!):


public void Initialize_Scanner()
{
sp.BaudRate = 9600;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.ReadTimeout = 1500;
sp.DataReceived += new
SerialDataReceivedEventHandler(sp_DataReceived);
sp.Open();

}

void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{

string ret = "\r";
string tempstring = sp.ReadLine().Replace(ret, "");
sp.Close();

//Will update the text box.
this.TXNumber.Invoke(new SetTextValueHandler(SetTextValue(tempString)), new
object[]{tempString});


if (tempstring.Length0)
{
Run_process();
sp.Open();
}
}

delegate void SetTextValueHandler(string value);

void SetTextValue(string value)
{
this.TXNumber.Text = value;
}
موفق باشید.

mir555
شنبه 10 بهمن 1388, 19:26 عصر
بله درست بود این کد شما رو استفاده کردم تونستم دیتا مورد نظرمو نمایش بدم
ممنون