تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 3 از 4 اولاول 1234 آخرآخر
نمايش نتايج 21 به 30 از 31

نام تاپيک: جلوگیری از اجرای دستور click در هنگام doubleclick در notifyicon

  1. #21
    کاربر فعال تالار .Net Msba's Avatar
    تاريخ عضويت
    Dec 2006
    محل سكونت
    ! My Mind
    پست ها
    506

    پيش فرض

    درصورتی که شما به درستی از thread استفاده کنید قطعا ابزاری حرفه ای تر از تایمر خواهد بود
    ای خدا خیرت بده، قطعا موافقم و من هم همین رو گفتم. هر چیز جای خودش، نه فقط من بلکه اگه همه استفاده کنیم.
    وقتی میگیم خطایی رخ داده یا احتمال خطا وجود داره که در دریافت متغیر به exception برخورد کنیم یا عملکرد الگوریتم به درستی عمل نکنه.
    دقیقا صحیح است استاد (استاد به معنی واقعی سو تفاهم نشود.). اما بخش دوم هم هست وقتی احتمال دارد یک کلیک شما از بین برود یعنی الگوریتم صحیح نبوده، نه باز هم این پاسخ نیست و الگوریتم صحیح است، بستر صحیح نبوده. کلمه ی volatile از اصلاح کننده های بستر است. متاسفانه خطاهای نوع دوم و سوم در Thread Safe دارای exception نیستند.

    در ضمن نمی دانستم که بیان گذاشتن یک کلمه ی volatile نیازمند چنین تعاریف طولانی هست.
    میشه لود شدن کنترل های فرم رو در هنگام اجرا کنترل کرد؟ یا حد اقلش شاید یه پروگرس بار برای اجرای فرم بزارم بزارم که هنگام لود شدن کنترل ها نمایش داده بشه؟ مثل backgroundworker . معمولا واسه اجرای کد میشه استفاده کرد اما برای لود شدن فرم رو نمیدونم.
    بین دو Event، با نام های Load و Shown را امتحان کنید. همچنین contstructor فرم نیز هست که عناصر ساخته و چیده می شوند اما اجرای این بخش در new شدن فرم است نه show. آن را نیز بررسی کنید ببینید به کارتان می آید. در ضمن پیشنهاد می کنم برای loading از یک فرم دیگر استفاده کنید و وضعیت را به آن ارسال کنید. همچنین می توانید از روش ترکیبی به سلیقه ی خودتان از موارد بیان شده نیز استفاده کنید.
    در ضمن راهی برای سبک شدن فرمتان نیست؟ بگویید شاید با دوستان بتوانیم پیشنهاد فرم سبک تر بدهیم.

    موفق باشید.
    Last edited by Msba; 06-08-2016 at 21:03.

  2. 2 کاربر از Msba بخاطر این مطلب مفید تشکر کرده اند


  3. #22
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    پيش فرض

    من از وی بی دات نت استفاده می کنم . تبدیلش کردم به وی بی حالا نمیدونم شاید بد تبدیلش کردم ولی خیلی بد کار می کرد این کد، به صورتی که هی فرم یک باز میشه و بسته میشه. توی حالت عادی بدون استفاده از نخ و تایمر این اتفاق کمتر میفته.
    انتظار هر نوع خطایی رو داشتم ولی نه اینکه فرم اول باز بشه ومجدد بسته بشه . من اصلاً کد باز شدن و بسته شدن فرم رو توی کدهام ننوشتم.ولی احتمال میدم:
    1.شما کدهای نمایش فرم رو توی دستورات Dispatcher اجرا نکرده باشید.
    2.جای دیگه تایمری یا چیزی برای مخفی کردن فرم نوشتید.

    دستورات رو در Try و Catch هندل کنید امیدوارم که به خطا نخورده باشید.
    Last edited by عــــلی; 07-08-2016 at 20:11.

  4. #23
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    پيش فرض

    زیاد سخت نگیر قرار نیست برنامه ساخت فضاپیما به کره مریخ رو بنویسیم

    استفاده از thread همانند استفاده از چاقو هست اگر درست ازش استفاده کنید بسیار کارامد خواهد بود در غیر این صورت ابزاری خطرناک خواهد بود

    درصورتی که شما به درستی از thread استفاده کنید قطعا ابزاری حرفه ای تر از تایمر خواهد بود
    توی ارسال و دریافت اطلاعات به سرور و کلاینت لو لول ترینی که ما میتونیم ازش استفاده کنیم برنامه نویسی سوکت هست حداقل به نظر میاد توی دات نت اینطوری هست.
    تایمر و Task و async await ... همشون از Thread استفاده می کنن در واقع برای راحتی کار برنامه نویس نوشته شدن که لول پایینش همون Thread هست.
    مثلاً شما اگر صدتا Task رو توی فکتوری new کنید و اجرا کنید خیلی کند تر از صد تا Thread اجرا خواهد شد که خاصیت isbackgournd اش false باشه.علتش اینه که ترد های تعریف شده در Task ها قابلیت isbackground و تنظیمات مدیریت شده ای دارن.

    نوشتن برنامه های مالتی تردینگ در ابتدای امر کار سختی نیست ولی اگر بدرستی manage نشه حتی ممکنه یک پروژه رو fail کنه.

  5. این کاربر از عــــلی بخاطر این مطلب مفید تشکر کرده است


  6. #24
    پروفشنال shadmehrshadow1's Avatar
    تاريخ عضويت
    Oct 2009
    پست ها
    842

    پيش فرض

    در ضمن راهی برای سبک شدن فرمتان نیست؟ بگویید شاید با دوستان بتوانیم پیشنهاد فرم سبک تر بدهیم.

    موفق باشید.
    راستش یه تقویم هستش که ماهانه هست. توش 42 تا کنترل واسه نمایش عدد روز ، روزهای شمسی هست. و42 تا واسه قمری و 42 تا برای میلادی. نمیدونم آیا راه بهتری هست یا نه.
    بله دقیقا میخواهم برای لودینگ از یه فرم دیگه استفاده کنم اما راه درستش رو برای قرار دادن لودینگ به منظور لود شدن کنترل ها رو بلد نیستم. فکر کنم از backgroundwoker باید استفاده بشه.

    انتظار هر نوع خطایی رو داشتم ولی نه اینکه فرم اول باز بشه ومجدد بسته بشه . من اصلاً کد باز شدن و بسته شدن فرم رو توی کدهام ننوشتم.ولی احتمال میدم:
    1.شما کدهای نمایش فرم رو توی دستورات Dispatcher اجرا نکرده باشید.
    2.جای دیگه تایمری یا چیزی برای مخفی کردن فرم نوشتید.

    دستورات رو در Try و Catch هندل کنید امیدوارم که به خطا نخورده باشید.
    راستش کد یه جوری برایم نامفهوم بود تبدیل کردنش به Vb.net برای یکم سخت بود مخصوصا که نتوستم اصلا از دستور Dispatcher استفاده کنم . مثل اینکه کار کردنش توی وی بی دات نت متفاوت هست و دستورات متفاوتی داره.

  7. #25
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    پيش فرض

    راستش کد یه جوری برایم نامفهوم بود تبدیل کردنش به Vb.net برای یکم سخت بود مخصوصا که نتوستم اصلا از دستور Dispatcher استفاده کنم . مثل اینکه کار کردنش توی وی بی دات نت متفاوت هست و دستورات متفاوتی داره.
    اگر شما از WPF استفاده میکنید:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اگر شما از ویندوز فرم استفاده میکنید به جای Dispatcher.Invoke از Invoke به تنهایی استفاده کنید به جای Dispatcher.Invoke.
    این قسمت کد مهمه و اگر نذارید نرم افزارتون با خطای دسترسی ترد ها مواجه میشه.

  8. این کاربر از عــــلی بخاطر این مطلب مفید تشکر کرده است


  9. #26
    پروفشنال shadmehrshadow1's Avatar
    تاريخ عضويت
    Oct 2009
    پست ها
    842

    پيش فرض

    اگر شما از WPF استفاده میکنید:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اگر شما از ویندوز فرم استفاده میکنید به جای Dispatcher.Invoke از Invoke به تنهایی استفاده کنید به جای Dispatcher.Invoke.
    این قسمت کد مهمه و اگر نذارید نرم افزارتون با خطای دسترسی ترد ها مواجه میشه.
    خیلی ممنون . درست شد.
    فقط من به جای Task از Thread استفاده کردم چون دستور Task چیزی به عنوان Start نداشت . حالا نمی دونم کار درستی کردم یا نه. کد رو به این صورت تغییر دادم.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    Last edited by shadmehrshadow1; 08-08-2016 at 21:03.

  10. #27
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    تاپیک عنوان ساده داشت وندیده بودم... عجب بحث داغی ایجاد شده
    البته تمام پست های دوستان را نخواندم الآن ساعت 0215 بامداد است و دارم p30world میخوانم


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


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    (زیاد هم نگران پرشدن int نباشید، اگر کاربر شما هر ثانیه یک کلیک کند و این کار را پیوسته بدون خواب وخوراک در 24 ساعت روز و 7 روز هفته و... ادامه دهد، 60 سال طول میکشد! برای ساعتی 100 کلیک مداوم 2000 سال و در عمل وبا اعداد واقعی چند هزار سالی طول میکشد!)

    برای WPF همانطور که در کد دوستان بود بجای BeginInvoke باید از Dispatcher استفاده شود.
    در خصوص volatile هم در مورد دسترسی به متغییر های ساده ای که مقدار مستقیم توسط ریسمان های متفاوت امکان تغییر دارد، بهتر است استفاده شود، مثال های ساده ای میتوان بیان کرد که استفاده وعدم استفاده تفاوت کاملا مشهود دارد ولی در نهایت تصمیم شرایط و محل واستفاده به عهده برنامه نویس ودر تخصص او است، به عنوان نمونه در کد فوق نباید استفاده شود و استفاده از کلاس Interlocked بسیار مناسب ومطمئن تر عمل میکند.
    شب خوش.

  11. 4 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  12. #28
    پروفشنال shadmehrshadow1's Avatar
    تاريخ عضويت
    Oct 2009
    پست ها
    842

    پيش فرض

    سلام
    تاپیک عنوان ساده داشت وندیده بودم... عجب بحث داغی ایجاد شده
    البته تمام پست های دوستان را نخواندم الآن ساعت 0215 بامداد است و دارم p30world میخوانم


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


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    (زیاد هم نگران پرشدن int نباشید، اگر کاربر شما هر ثانیه یک کلیک کند و این کار را پیوسته بدون خواب وخوراک در 24 ساعت روز و 7 روز هفته و... ادامه دهد، 60 سال طول میکشد! برای ساعتی 100 کلیک مداوم 2000 سال و در عمل وبا اعداد واقعی چند هزار سالی طول میکشد!)

    برای WPF همانطور که در کد دوستان بود بجای BeginInvoke باید از Dispatcher استفاده شود.
    در خصوص volatile هم در مورد دسترسی به متغییر های ساده ای که مقدار مستقیم توسط ریسمان های متفاوت امکان تغییر دارد، بهتر است استفاده شود، مثال های ساده ای میتوان بیان کرد که استفاده وعدم استفاده تفاوت کاملا مشهود دارد ولی در نهایت تصمیم شرایط و محل واستفاده به عهده برنامه نویس ودر تخصص او است، به عنوان نمونه در کد فوق نباید استفاده شود و استفاده از کلاس Interlocked بسیار مناسب ومطمئن تر عمل میکند.
    شب خوش.
    ممنون بابت توضیحاتتون .
    درکد قیلی که دوستمون داده بودند اصلا فرم اولیه که قرار بود در هنگام تک کلیک باز شود اجرا نمی شد اما در این کدی که شما گذاشتید این اتفاق میفته و وقتی فرم دوم که در هنگام دابل کلیک باز می شود رو اجرا می کنیم چند ثانیه در حالت هنگ قرار میگیره سپس فرم اول هم باز می شود.

    یه مشکل دیگر هم داشتم که دوستمون توضیحاتی رو دادند اما موفق نشدم.

    میشه لود شدن کنترل های فرم رو در هنگام اجرا کنترل کرد؟ یا حد اقلش شاید یه پروگرس بار برای اجرای فرم بزارم بزارم که هنگام لود شدن کنترل ها نمایش داده بشه؟ مثل backgroundworker . معمولا واسه اجرای کد میشه استفاده کرد اما برای لود شدن فرم رو نمیدونم.
    راهی نیست که بشه این بخش رو هم تحت کنترل قرار داد؟

  13. #29
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    نقل قول نوشته شده توسط shadmehrshadow1
    ... در هنگام دابل کلیک باز می شود رو اجرا می کنیم چند ثانیه در حالت هنگ قرار میگیره سپس فرم اول هم باز می شود ...
    یعنی الآن مشکل حل شد؟ یا منظورتان این است که با کد فوق هم مشکل دارید و هر دوعملی که (برای Click و DblClick) نوشته اید انجام میشود؟

    نقل قول نوشته شده توسط shadmehrshadow1
    ... یه پروگرس بار برای اجرای فرم بزارم بزارم که هنگام لود شدن کنترل ها نمایش داده بشه؟
    نکته اول:
    بطور معمول استخراج و آماده کردن دیتا زمان بر است و نمایش سریع اتفاق می افتد !
    به عنوان نمونه در یک برنامه دیتابیسی، واکشی اطلاعات از دیتابیس مهم ترین بخش کار است که میتوان توسط ریسمان جدا انجام داد و در زمان کار یک تصویر گردشی (gif مانند) نمایش داد.
    اگر UI شما به ذات (فارغ از دیتا) خیلی سنگین است، شاید نیاز به اصلاح داشته باشد، شاید حجم بالایی از سطرها را نشان میدهید ...
    ...
    نکته دوم:
    برای پروژه هایی مانند WinForm میتوانید یک پیام "لطفا منتظر بمانید..." روی فرم قرار دهید ...

    بخش مورد نظر را در یک UserControl بسازید و new کنید ...
    دیتاها را واکشی و bind کنید...
    روی UserControl و بخش های مهم متدهایی مانند CreateHandle و CreateControl و برای ظرف ها PerformLayout را تحت BeginInvoke اجرا کنید ...

    سپس UserControl را Visible کنید.

  14. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  15. #30
    پروفشنال shadmehrshadow1's Avatar
    تاريخ عضويت
    Oct 2009
    پست ها
    842

    پيش فرض

    سلام

    یعنی الآن مشکل حل شد؟ یا منظورتان این است که با کد فوق هم مشکل دارید و هر دوعملی که (برای Click و DblClick) نوشته اید انجام میشود؟

    .
    کدی که شما گذاشتید به طوری هست که وقتی دابل کلیک صورت می گرد عمل کلیک هم اجرا می شود. در حالی که کدی که دوست دیگرمون گذاشتند و من اون کد رو مجددا گذاشتم به درستی عمل می کرد و مشکلی توش نبود. و فقط من به جای دستور Task از Thread استفاده کردم.نمیدونم کار درستی بود یا نه.
    ممنون بابت توضیحات دیگرتون
    Last edited by shadmehrshadow1; 10-08-2016 at 21:16.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •