نقل قول: سریال پورت و Thread
کل عملیات مربوط به کار با پورت مورد نظر رو در یک Thread مجزا انجام بدین. لزومی نداره کار های دیگه متوقف بشه مگه اینکه اون کارها درصد قابل توجهی از CPU رو بگیره.
نقل قول: سریال پورت و Thread
دوست عزیز ممنون میشم اگه یه سمپل کد برام بذاری چون مشکلم اینه که نمیتونم یک دلیگیت به ThreadStart بفرستم یعنی اجازه نمیده تابع Data_Receive رو توش قرار بدم چرا که این تابع دارای پارامتره و Threadstart حتما بدون پارامتر میخواد
نقل قول: سریال پورت و Thread
سلام
دوست من، Thread میتونه پارامتر داشته باشه.
http://stackoverflow.com/questions/1...ith-parameters
و بر خلاف نظر دوستمون plus به نظر من حتماً از sleep استفاده کن تا عملکرد
عادی نرمافزار دچار مشکل نشه.
صبا صبوحی
نقل قول: سریال پورت و Thread
ممنون از راهنماییتون منم همین کارو قبلا انجام دادم ولی مشکلم اینه که وقتی اسلیپ میزنم باید زمان تعیین شده باشه ولی من میخوام با این اسلیپ برنامه بره سراغ Data_Receive و وقتی کارش اونجا تموم شد بلافاصله برگرده به Thread اصلی .
آیا راهی هست که بشه Thread ای که اسلیپ کردم رو بش بگم بعد از اتمام Data_Receive دوباره به کارش ادامه بده قبل از این که تایم اسلیپ تموم شه ؟ چون زمان خیلی مهمه اگه 20 میلی ثانیه بیشتر شه امکان داره مقادیرم دچار مشکل شه
نقل قول: سریال پورت و Thread
نقل قول:
نوشته شده توسط
SabaSabouhi
منظورتون رو متوجه نشدم. یعنی شما در UI Threadاز Sleep استفاده میکنید؟ چه نکته ای در استفاده از Sleep هست؟ فراخوانی Sleep هیچ کاری جز متوقف کردن Thread جاری انجام نمیده، حالا شما اگه Thread دیگه ای نداشته باشین که براتون کار انجام بده Sleep فقط باعث هنگ کردن UI میشه.
نقل قول:
نوشته شده توسط
ArtStyle
ممنون از راهنماییتون منم همین کارو قبلا انجام دادم ولی مشکلم اینه که وقتی اسلیپ میزنم باید زمان تعیین شده باشه ولی من میخوام با این اسلیپ برنامه بره سراغ Data_Receive و وقتی کارش اونجا تموم شد بلافاصله برگرده به Thread اصلی .
آیا راهی هست که بشه Thread ای که اسلیپ کردم رو بش بگم بعد از اتمام Data_Receive دوباره به کارش ادامه بده قبل از این که تایم اسلیپ تموم شه ؟ چون زمان خیلی مهمه اگه 20 میلی ثانیه بیشتر شه امکان داره مقادیرم دچار مشکل شه
شما تا وقتی دو Threadنداشته باشید که نمیتونید اون رو هم Sleep کنید و هم در اجرای متد Data_Receive داشته باشید. اگه شما Data_Receive رو مثلا در Thread1 در حال اجرا داشته باشید، وقتی در UI Thread هستین با استفاده از متد Thread.Join میتونید Thread جاری رو تا اتمام Thread1 متوقف کنید.
برای استفاده از Parameter موقع ایجاد Thread میتونید به این روش عمل کنید:
class Data_ReceiveParams {
public int Parameter1 {
get;
set;
}
public int Parameter2 {
get;
set;
}
}
private void button1_Click_9(object sender, EventArgs e) {
var thredStart = new ParameterizedThreadStart(DoSomeOperation);
var dataReceiveParams = new Data_ReceiveParams();
dataReceiveParams.Parameter1 = 10;
dataReceiveParams.Parameter2 = 15;
Thread thread = new Thread(thredStart);
thread.Start(dataReceiveParams);
}
private void DoSomeOperation(object dataReceiveParams) {
Data_ReceiveParams dParams = (Data_ReceiveParams)dataReceiveParams;
Data_Receive(dParams.Parameter1, dParams.Parameter2);
this.BeginInvoke((MethodInvoker) delegate { this.NotifyOperationsDone()});
}
private void Data_Receive(int parameter1, int parameter2) {
// Do lengthy operation
}
private void NotifyOperationsDone() {
// Here we are in UI thread
MessageBox.Show("Done!");
}
نقل قول: سریال پورت و Thread
نقل قول:
نوشته شده توسط
ArtStyle
ممنون از راهنماییتون منم همین کارو قبلا انجام دادم ولی مشکلم اینه که وقتی اسلیپ میزنم باید زمان تعیین شده باشه ولی من میخوام با این اسلیپ برنامه بره سراغ Data_Receive و وقتی کارش اونجا تموم شد بلافاصله برگرده به Thread اصلی .
آیا راهی هست که بشه Thread ای که اسلیپ کردم رو بش بگم بعد از اتمام Data_Receive دوباره به کارش ادامه بده قبل از این که تایم اسلیپ تموم شه ؟ چون زمان خیلی مهمه اگه 20 میلی ثانیه بیشتر شه امکان داره مقادیرم دچار مشکل شه
سلام
آیا شما با EventWaitHandle آشنایی داری؟ اگه داری ازش استفاده کن.
فقط اگه آشنایی ندارین، اول خوب مطالعه کن چون این مبحث خیلی حرفهای هست و اگه درست انجام ندی، کارت رو مشکلتر میکنه.
صبا صبوحی
نقل قول: سریال پورت و Thread
نقل قول:
نوشته شده توسط
plus
منظورتون رو متوجه نشدم. یعنی شما در UI Threadاز Sleep استفاده میکنید؟ چه نکته ای در استفاده از Sleep هست؟ فراخوانی Sleep هیچ کاری جز متوقف کردن Thread جاری انجام نمیده، حالا شما اگه Thread دیگه ای نداشته باشین که براتون کار انجام بده Sleep فقط باعث هنگ کردن UI میشه.
شما تا وقتی دو Threadنداشته باشید که نمیتونید اون رو هم Sleep کنید و هم در اجرای متد Data_Receive داشته باشید. اگه شما Data_Receive رو مثلا در Thread1 در حال اجرا داشته باشید، وقتی در UI Thread هستین با استفاده از متد Thread.Join میتونید Thread جاری رو تا اتمام Thread1 متوقف کنید.
سلام
دوست عزیز، منظورم Sleep کردن UI نبود، بلکه منظورم اون Thread دوم بود که قراره از درگاه سریال بخونه.
صبا صبوحی
نقل قول: سریال پورت و Thread
نقل قول:
نوشته شده توسط
ArtStyle
با سلام
وقت همگی بخیر
یه سوالی راجع به پورت سریال و Thread برام پیش اومده ممنون میشم کسی راهنمایی کنه
من میخوام در برنامم موقعی که از سریال پورت اطلاعاتی میاد برنامه اولویت خودشو بذاره رو مقادیر گرفته شده از Data_Receive یعنی تمام کارای دیگه متوقف شه
در واقع دو سریال پورت در حال استفادس حال اگر 50 میلی ثانیه هم تاخیر داشته باشم مقادیر دیگه به دردم نمیخوره ( اگر در کدهام از (Thread.Sleep(50 استفاده کنم )
در واقع میخوام مثل CodeVision مقادیر رو به صورت آنی دریافت کنم ممنون میشم کسی راهنمایی کنه
منم به همین مشکل خوردم
اون sleep نخ اصلی رو از کار میندازه
اخرش به چه نتیجه ای رسیدید؟؟