سلام به همه.
میخواستم در سی شارپ بدونم چجوری میشه فهمید دیتای جدیدی روی پورت سریالی که بازه اومده!
کسی هست کمک کنه؟
سلام به همه.
میخواستم در سی شارپ بدونم چجوری میشه فهمید دیتای جدیدی روی پورت سریالی که بازه اومده!
کسی هست کمک کنه؟
با استفاده از ایونت: DataRecieved
اگه Windows Form کار میکنین یه کامپوننت SerialPort از ToolBox بکشین بندازین رو فرم و بعد کامپوننت رو انتخاب کنین و تو پنجره پراپرتیز تو قسمت Events برین روی ایونت DataRecieved دابل کلیک کنین تا متد به ایونت مزبور اتچ بشه. بعد هر داده ای که روی پورت سریال بیاد این متد اجرا میشه. باید دقت کنید که چون این متد داخل Thread جداگانه ای از Thread اصلی اجرا میشه نمیتونین از داخل این متد به کنترلهای داخل فورم دسترسی داشته باشین و برای دسترسی مثلا به لیبل روی فورم اصلی باید از PInvoke استفاده کنین.
خیلی ممنونم. من تازه وارد C# شدم. برنامه نویسی میکردم ولی تازه اومدم سمت C# برای همین زیاد وارد نیستم.
من میخوام وقتی دیتا اومد یه سری کار ها بکنم. دیتام از نوع رشته هست و وقتی دیتا اومد میخوام اون رشته رو تجزیه کنم و یه سری مقادیر ازش بدست بیارم.
حالا میخوام بدونم وقتی دیتا اومد و اینونت datarecieved فعال شد توی همون جا کدم رو بنویسم؟
بله همونجا بنويسين، البته تو پست قبلی هم گفتم که مستقيم نمیتونی به UI دسترسی داشته باشی.
فعلا نمايشت رو با MessageBox انجام بده و یا تو یه فرمی که تو همين متد نمونه سازی شده باشه...
من یه پورت مجازی ساختم به صورت Bridge ولی با این برنامه کار نمیکنه. یعنی وقتی به اون یه پورت دیتا میفرستم کاری انجام نمیده... اینم کدم
private void process(object sender, EventArgs e)
{
if (rxtext.Length >= 4)
{
listBox1.Items.Add(rxtext);
textBox3.AppendText(rxtext);
MessageBox.Show(rxtext, "DR");
}
}
private void sp_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
{
rxtext = sp.ReadLine();
this.Invoke(new EventHandler(process));
}
بايد رشته اي كه ارسال مي كنيد به n\ ختم بشه.
چك كنين بنينين ارسالتون به اين صورته.
متد ReadLine منتظر ميمونه تا n\ برسه
متد ReadExisting چکار میکنه؟
بعد یه سوال دیگه البته فقط جهت اطمینان میپرسم.
با اینونت DataRecived مهم نیست در چه زمانی دیتا براش بیاد دیگه؟
لطف میکنین یه پروژه یا سورسی برام بذارین؟
این موضوع یکم برام مهمه...
من نتونستم بازم دیتا بگیرم...
اگه کسی میدونه یه سورسی یا پروژه ای که ازش جواب گرفته بزاره. ممنون
ReadExisting متدی هست که درصورتی که ذیتایی باشه خونده میشه و سریال قفل نمیشه
احتمالا با میکرو کار میکنید
بهترین روش این هست که بعد از گرفتن هر رشته سریال رو خالی کنید و آماده بارگیری مجدد باشید
کسی نظر دیگه ای نداره؟ من خیلی گیر کردم!
سلام دوست من وقتت بخیر ، برات این مثال ها رو پیدا کردم امیدوارم کمکت منه
MSDN
MSDN
StackOverflow
dreamincode
موفق باشی