PDA

View Full Version : سوال: ایجاد تاخیر در برنامه بدون هنگ کردن



fire22
جمعه 22 آذر 1392, 16:24 عصر
با سلام دوستان عزیز.
دوستان من یه برنامه نوشتم که کار با پورت موازی هست. و مجبورم در هنگام ارسال سیگنال به پورت یه مدت زمانی رو صبر کنم و سیگنال بعدی رو بفرستم.
تو برنامه زیاد از این کار استفاده میکنم. ولی مشکل اینه که هنگ میکنه برنامه. در واقع هنگ نیست و داره به کار خودش ادامه میده ولی هیچ کار دیگه ای نمیشه با برنامه انجام داد.
ترو خدا کمک کنید چیکار باید بکنم.
یه نمونه کد میزارم فقط مهم اینه که هنگ نکنه برنامه همین.


PortInterop.Output(888, 1);
Thread.Sleep(1000);
PortInterop.Output(888, 0);
Thread.Sleep(1000);
PortInterop.Output(888, 1);
Thread.Sleep(1000);
PortInterop.Output(888, 0);

مهرداد صفا
جمعه 22 آذر 1392, 16:27 عصر
سلام.
از یک Thread دیگر (به غیر از Thread اصلی) برای این کار استفاده کنید.

fire22
جمعه 22 آذر 1392, 16:30 عصر
سلام.
از یک Thread دیگر (به غیر از Thread اصلی) برای این کار استفاده کنید.
دوست عزیز میشه بیشتر توضیح بدین؟؟؟ یعنی چی یه thread دیگه؟؟ از ظهر تا حالا دارم تو نت سیرچ میکنم خسته شدم دیگه فردا هم پروژه رو باید تحویل بدم :D
ممنون میشم اگه کمکم کنید

sohil_ww
جمعه 22 آذر 1392, 16:42 عصر
با اجازه آقای صفا

این لینک کمکت می کنه

http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx

fire22
جمعه 22 آذر 1392, 16:48 عصر
با اجازه آقای صفا

این لینک کمکت می کنه

http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx
اقا سهیل مرسی.
ولی داداش من خوف کردم رفتم تو این لینک.
یعنی 2 تا خط کد نمیشه به جای این گذاشت و از این استفاده نکرد؟؟
تو نت خیلی سیرچ کردم. یه چیزایی در مورد this.invok بود که متاسفانه من اصلا نمیدونم اونم چی هست.
اگه میشه کدشو برام بزارین واقعا ممنونتون میشم

fire22
جمعه 22 آذر 1392, 17:38 عصر
یکی نیست کمک ما کنه؟؟؟؟؟؟

plus
جمعه 22 آذر 1392, 18:37 عصر
یکی نیست کمک ما کنه؟؟؟؟؟؟
راه ساده تر اینه که از کنترل BackgroundWorker استفاده کنی.از Toolbox یکی ازش توی فرم ایجاد کن، توی رویداد DoWork کدهای مورد نظرت رو بگذار و هر وقت خاصی کدهات اجرا بشه متد RunWorkerAsyc رو فراخوانی کن.
هرچند شما اگه به درستی مفهوم Multi Threading رو ندونی برای انجام عملیات همزمان ممکنه دچار مشکل بشی.

fire22
جمعه 22 آذر 1392, 19:57 عصر
راه ساده تر اینه که از کنترل BackgroundWorker استفاده کنی.از Toolbox یکی ازش توی فرم ایجاد کن، توی رویداد DoWork کدهای مورد نظرت رو بگذار و هر وقت خاصی کدهات اجرا بشه متد RunWorkerAsyc رو فراخوانی کن.
هرچند شما اگه به درستی مفهوم Multi Threading رو ندونی برای انجام عملیات همزمان ممکنه دچار مشکل بشی.

با تشکر از دوست خوبم.
ولی من وقتی این BackgroundWorker رو گذاشتم و دستوراتمو توش نوشتم و توی button هم نوشتم backgroundworker.runworkerasyc; ولی اصلا هیچ اتفاقی نمیوفته برنامه اجرا نمیشه دیگه.
در ضمن من نیم اسپیسش رو هم اضافه کردم!!!!.
کدمو میزارم دوستان لطف کنن راهنمایی کنن. واقعا ممنون میشم.

fire22
جمعه 22 آذر 1392, 20:12 عصر
دوستان ظاهرا مشکل حل شد. البته مشکل از button بود که نمیدونم چرا روش کلیک میکردم اجرا نمیشد!!!

fire22
شنبه 23 آذر 1392, 14:24 عصر
دوستان به یه مشکل جدید بر خوردم. چطور میتونم به برنامه بگم تا زماان اتمام کار BackgroundWorker 1 صبر کن و بعد BackgroundWorker 2 رو اجرا کن. اخه این دو همزمان اگه بخوان اجرا بشن چون از یه منابع استفاده میکنن دچار تداخل میشه.