واضح آرشیو وب فارسی:سایت ریسک: mnrhm23-12-2006, 11:12 AMباسلام من یک برنامه دارم که در آن یک thread رو ایجاد می کنم و این ترد یک متد را که در آن یک لوپ است اجرا می کند درون این لوپ هر بار باید یک پیغام داخل تکست باکس روی فرم نمایش داده شود ولی این طور نمی شود یعنی دسترسی به تکست باکسی که در ترد اصلی برنامه ایجاد شده است امکان ندارد؟؟! چطور باید این مشکل را حل کنم مثلا شما یک ترد می سازید که یک لوپ را بی نهایت تکرار می کند و این لوپ باید درون تسکت باکس هر بار عددی را نمایش دهد در ضمن برای این من این کار را می کنم چون اگر ترد اصلی برنامه را بکار بگیرم چیزی داخل تسکت باکس به صورت لحظه ای نمی بینم و باید لوپ تمام شود تا بتوانم آخرین استرینگ داخل تکست باکس را ببینم برای همین بنده یک ترد دیگر ایجاد کرده ام ولی به این مشکل برخورد کرده ام ممنون می شوم اگر راهنمایی کنید با تشکر someone23-12-2006, 11:41 PMسلام. سوالتون اصلا یه سوال مبتدی نیست. کسی که سر و کارش با Thread میافته حداقل یه برنامه نویس متوسط هست. فکر میکنم Category کنترل TextBox شما از نوع value هست. مثلا یه variable از نوع string برای TextBox انتخاب کردید. برای اینکه هر بار بعد از تغییر مقدار این variable بتونید اون رو نمایش بدید باید از UpdateData استفاده کنید. ولی استفاده از این متود در یک Thread به اصطلاح unsafe و میشه گفت خطرناک هست. من دو پیشنهاد برای شما دارم. 1- از متود SetDlgItemText استفاده کنید. یک pointer از DlgClass ایجاد کنید و توسط این اشاره گر از این متود استفاده کنید. (ThreadFunc یه تابع static هست و نمتونید به طور مستقیم از اعضای public کلاس در اون استفاده کنید.) مثلا به این شکل : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! ID کنترل TextBox این عبارت انتخاب شده : IDC_THREAD 2- Category کنترل TextBox رو control انتخاب کنید. و از تابع SetWindowTest استفاده کنید. به شکل زیر : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! m_th از نوع کنترل (از کلاس CEdit) انتخاب شده. اگه مشکلی پیش اومد اطلاع بدید. ممنون. mnrhm24-12-2006, 11:00 AMبا تشکر اگر می شود یک مثال کامل که یک ترد دیگر در یک لوپ داخل تکست باکس هر بار عددی را می نویسد با سی شارپ بزنید و اگر امکان دارد سرس آن را در سایت قرار دهید در ضمن در یک لوپ شما اگر ازمتد آپدیت تکست باکس استفاده کنید درست است که هر بار نمایش می دهد ولی مشکل اصلی اینجاست که شما نمی توانید فرم را تکان دهید و یا اگر بر روی فرم دیگری کلیک کنید و دوباره به فرم بر گردید صفحه فرم سفید می شود و مشکل من هم دقیقا همین است someone24-12-2006, 07:14 PMدوباره سلام. همونطور که گفتم استفاده از UpdateData در یک Threadدرست نیست.( unsafe & dangerous code ) البته این مورد در ++VC هست چون در #C این تابع هر با بعد اجرای Text. اجرا میشه و نیازی به Update کردن کنترل مورد نظر نیست. در مورد متود هایی که صحبت کردیم بر میگرده به MFC . چون نگفته بودید که از چه زبانی استفاده میکنید. NotResponding شدن برنامتون ممکنه به دلیل Thread Priority ی باشه که برای برنامه انتخاب کردید. در #C میتونید از Threading Namespace و Thread Class استفاده و برای priority میتونید از Thread.Sleep استفاده کنید. یه نمونه براتون میذارم اگه مشکلی بود اطلاع بدید. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! counter اسم کنترل TextBox هست. ممنون. mnrhm27-12-2006, 09:28 AMsomeone عزیز سلام خسته نابشید مشکلم رو حل کردیدببخشید که یکم دیر شد واقعا با وجود انسان هایی مثل شما آدم امید وار میشه انسان هایی که به دیگران کمک می رسانند خدا خیرتون بده ان شاء الله که دایما در حال پیشرفت و در راه موفقیت باشید خدا نگهدارتون باشه mnrhm27-12-2006, 09:35 AMsomeone عزیز سلام خسته نابشید مشکلم رو حل کردیدببخشید که یکم دیر شد واقعا با وجود انسان هایی مثل شما آدم امید وار میشه انسان هایی که به دیگران کمک می رسانند خدا خیرتون بده ان شاء الله که دایما در حال پیشرفت و در راه موفقیت باشید خدا نگهدارتون باشه سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 251]