PDA

View Full Version : سوال: کمک در طراحی برنامه



peymanjon
جمعه 23 مهر 1389, 13:45 عصر
سلام...
من می خواهم یک برنامه بنویسیم که همیشه در حال گوش دادن به port باشه و اگه اطلاعاتی اومد یکسری پردازش بکند و در دیتابیس ذخیره نماید.
از سوی دیگر برنامه امکاناتی چون گزارش گیری و جستجو و ایجاد کاربر با سطوح دسترسی متفاوت و ... دارد.
حالا سوال من این است که آیا قسمت اولی که شرح دادم(گوش دادن به پورت)را در یک Thread بگذارم یا خیر ؟ به این دلیل من این سوال را مطرح ساختم که مثلا اگه کاربر روی جستجو کلیک کند و یک فرم جدید برای اون باز شود مثل این searchform.showDialog(); و تریدی که من برای خواندن از پورت نوشتم در فرم اصلی من باشه ، مشکلی در کار آن با باز شدن فرم جدید ایجاد نمی شود؟
من الان 2 راه به ذهنم میرسه 1- یک App جداگانه برای قسمت پورت و ثبت اون در دیتابیس بنویسم و این برنامه همیشه در حالت run باشه و امکاناتی چون جستجو و گزارشگیری و کاربران و ... را در یک APP دیگر بگذارم و کاربران بتوانند از آن استفاده کنند.
2-همه را در یک برنامه بنویسم ولی قسمت خواندن از پورت را در Thread بگذارم .

اگه روش دوم صحیح می باشد لطفا به من کمک کنید چه حوری باید این کار را بکنم با توجه به سوال هایی که در اول مطرح کردم.
با تشکر

cheshm6k
جمعه 23 مهر 1389, 18:54 عصر
سلام.
SerialPort یه رویداد داره به نام DataRecieved، که وقتی پورت چیزی دریافت میکنه اجرا میشه و میتونی بخونی و بعد پردازش و .................

تو سایت سرچ کنید ، هم نمونه برنامه هست، هم ...........

موفق باشید.

peymanjon
جمعه 23 مهر 1389, 19:10 عصر
اینو می دونم ، پس لازم نیس من از Thread استفاده کنم؟ اگه من تو این رویداد کد هامو بنویسم در قسمت فرم اصلی و در حین کار با برنامه کاربر توی یک فرم دیگه از برنامه ام باشه باز هم اگه اطلاعاتی روی پورت بیاد ، مشکلی توی دریافت آن نخواهم داشت؟
همچنین زمانی که برای دریافت و ثبت اطلاعات توی دیتابیس صرف می شود آیا مانعی برای دریافت دیگر اطلاعاتی که پشت سر هم روی پورت دارند می آیند ، ندارند؟یعنی لازم نیست من اطلاعات را در یک بافر یا آرایه ذخیره و بعد به ترتیب در دیتابیس ذخیره کنم تا اطلاعاتم از بین نرود؟

cheshm6k
جمعه 23 مهر 1389, 19:43 عصر
پس لازم نیس من از Thread استفاده کنم؟
برای گوش دادن به پورت نه ، نیاز نیست . چون او رویداد هم در واقع، یه Thread هستش . اما اگه پردازش طولانی میخوای انجام بدی و در این حین ممکنه اطلاعات جدید بیاد، واسه اون کارا میتونی از ترد استفاده کنی ( که معمولا پردازش اونقدر طولانی نیست).

اگه من تو این رویداد کد هامو بنویسم در قسمت فرم اصلی و در حین کار با برنامه کاربر توی یک فرم دیگه از برنامه ام باشه باز هم اگه اطلاعاتی روی پورت بیاد ، مشکلی توی دریافت آن نخواهم داشت؟


اگه اون فرم ها با پورت کار نمیکنن ، نه مشکلی پیش نمیاد و اون فرم به کارش ادامه میده. ( استفاده از پورت در فرم اصلی، اصلا خوشایند نیست(البته این نظر منه))


همچنین زمانی که برای دریافت و ثبت اطلاعات توی دیتابیس صرف می شود آیا مانعی برای دریافت دیگر اطلاعاتی که پشت سر هم روی پورت دارند می آیند ، ندارند؟یعنی لازم نیست من اطلاعات را در یک بافر یا آرایه ذخیره و بعد به ترتیب در دیتابیس ذخیره کنم تا اطلاعاتم از بین نرود؟

اگر اطلاعاتی که دریافت میکنی قرار نیست در دیتابیس بیس ثبت بشه نه نیاز نیست و ربطی به هم ندارند. اما اگر اطلاعات قراره ثبت بشه باید چک کنی اگه دیتابیس مشغول نیست ، عمل درج انجام بشه .

peymanjon
جمعه 23 مهر 1389, 23:31 عصر
اگه اون فرم ها با پورت کار نمیکنن ، نه مشکلی پیش نمیاد و اون فرم به کارش ادامه میده. ( استفاده از پورت در فرم اصلی، اصلا خوشایند نیست(البته این نظر منه))
در اصل برنامه من انجام پردازش روی اطلاعاتی است که از پورت می آید ، و سایر کارها نظیر جستجو و گزارش گیری هم بر اساس همین اطلاعات است . به نظر شما اگه کدهای خواندن از پورت در فرم اصلی من نباشه در کجا باید بنویسم ؟

cheshm6k
شنبه 24 مهر 1389, 15:22 عصر
در اصل برنامه من انجام پردازش روی اطلاعاتی است که از پورت می آید ، و سایر کارها نظیر جستجو و گزارش گیری هم بر اساس همین اطلاعات است . به نظر شما اگه کدهای خواندن از پورت در فرم اصلی من نباشه در کجا باید بنویسم ؟

میتونید یه فرم مخصوص این کار طراحی کنید . با این کار به کاربر اجازه میدید، هر موقع که خواست، به پورت گوش بده . البته میتونید در فرم ابتدایی برنامه هم با گذاشتن قابلیت استارت و استاپ، این توانایی رو به کاربر بدی، ولی خیلی دلچسب نیست که اینکار در این فرم انجام بشه .

موفق باشید.

ASKaffash
شنبه 24 مهر 1389, 15:34 عصر
سلام
راه حل اول شما بهتر است در ضمن اگر این App را به یک ویندوز سرویس تبدیل کنید استقلال برنامه و تضمین اجرا توسط ویندوز را هم بدست می آورید

goolestan
شنبه 24 مهر 1389, 17:04 عصر
بهترین راه ممکن استفاده از سرویس میباشد به این صورت که یه سرویس برای ارسال و دریافت اطلاعات دارین و یه سرویس هم برای خواندن و نوشتن داشته باشی که اطلاعات دریافتی را ترجمه کنه و تو دیتابیس ثبت کنه
و یه App هم برای کاربرت داشته باشی