نمایش نتایج 1 تا 18 از 18

نام تاپیک: مطلع کردن کاربر از زمانبر بودن عملیات

  1. #1

    مطلع کردن کاربر از زمانبر بودن عملیات

    من می خوام تو برنامه در قسمت های زمانبر ، کاربر رو متوجه کنم مثلا ساعت شنی یا "لطفاً چند لحضه صبر کنید" یا یه چنین چیزی بزارم که زیبا هم باشه . لطفاً اگه می تونید کمک کنه ؟
    ممنون

  2. #2
    کاربر دائمی آواتار DoDoklak
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شهر 3500 ساله
    پست
    320

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    به نظر من بهتر از تصاویر متحرک برای انتظار استفاده کنید.
    مزیت این تصاویر متحرک نسبت به خود Process Bar اینه که برنامه نویسی نمیخواد و لازم نیست مدت زمان نامعلومی رو مدام محاسبه کنید.چون بعضی پروسسها زمانش مشخص نیست و شما نمی دونید چند تا حرکت جلو برید ولی با این تصاویر متحرک گردشی هیچ مشکلی ندارید

    چند تا نمونه












    آخرین ویرایش به وسیله DoDoklak : یک شنبه 01 آذر 1388 در 12:30 عصر

  3. #3

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    منون از راهنماییتون
    چه طور از اینها استفاده کنم ؟

  4. #4

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    ____________________________________
    آخرین ویرایش به وسیله ehsan21 : دوشنبه 02 آذر 1388 در 09:22 صبح

  5. #5
    کاربر دائمی آواتار DoDoklak
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شهر 3500 ساله
    پست
    320

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    کامپوننت جالبی بود
    اینها فقط تصاویر هستند نه کامپوننت


    اما به style برنامه من نمی خوره . فکر کنم از همون روش دوستان باید استفاده کنم
    اینها فقط چند تا نمونه بودن شما میتونید نمونه های بیشتری پیدا کنید که با شکل و ظاهر برنامه تون هماهنگ باشه

    فکر کنم از همون روش دوستان باید استفاده کنم
    البته نمی خواستم از این روش استفاده کنم ظاهراً به جز این راهی نیست
    کدوم روش اینجا به غیر از تصاویر متحرک روش دیگه ای ذکر نشده
    مگر کار شما چیه که توش موندید؟

  6. #6

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    ببخشید تاپیک قبلی اشتباهی ارسال شده بود
    چه طور از این تصاویر استفاده کنم؟

  7. #7
    کاربر دائمی آواتار DoDoklak
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شهر 3500 ساله
    پست
    320

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    روی تصویر موجود کلیک راست کنید کنید و گزینه Save Picture As رو بزنید و اون تصویر رو برای خودتون با فرمت Gif ذخیره کنید.

    بعد تو برنامه تون اون جایی که کاربر باید منتظر بشه یک PicturBox میذارید و تصویر متحرک رو به اون اعمال میکنید و خاصیت Visible اونو برابر false قرار بدید و وقتی عملیات شروع شد کافی Visible اونو برابر True قرار بدید تا کاربر اونو ببینه و وقتی عملیات تموم شد دوباره Visible اونو False میکنید.
    به همین سادگی

    یه نمونه

    وقتی کاربر عملیات رو شروع میکنه فقط تصویر مخفی شده ظاهر میشه


  8. #8

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    متاسفانه با این روش نمیشه
    من در ابتدای رویداد کلیل کامند اونو true می کنم و هنگامی که محاسبات تموم میشه اونو false اما نمیشه .

  9. #9
    کاربر دائمی آواتار DoDoklak
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شهر 3500 ساله
    پست
    320

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    متاسفانه با این روش نمیشه
    من در ابتدای رویداد کلیل کامند اونو true می کنم و هنگامی که محاسبات تموم میشه اونو false اما نمیشه .
    چرا میشه به احتمال زیاد چون فرایند پروسس شما خیلی سنگین بوده تصویر نتوسته خودشو نمایش بده
    شما تو اجرای دستوراتتون از کد زیر استفاده کنید
    Application.DoEvent

  10. #10

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    به کمک دستورات فوق می توانید زمان اجرای دستورات را بدست آورید .

    Dim a As New Diagnostics.Stopwatch
    a.Start()
    Me.Text = Strings.StrDup(1000, "a")
    a.Stop()
    MsgBox(a.ElapsedMilliseconds)
    a.Start()
    Dim s As String
    For i As Integer = 1 To 1000
    s += "a"
    Next
    Me.Text = s
    a.Stop()
    MsgBox(a.ElapsedMilliseconds)

  11. #11

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    آره فرایند پروسس من خیلی سنگینه
    از Application.DoEvent چه طور استفاده کنم ؟

  12. #12

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    تمام خطوط یک پروسه با هم اجرا می شوند و سپس صفحه refresh می شود یعنی اینکه اگر شما در ابتدای event تصوير را visible کردید و در انتها invisible بنابراین شما فقط invisible را می بینید که می توانید با post back کردن در کد انفصال ايجاى كني.

  13. #13
    کاربر دائمی آواتار DoDoklak
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شهر 3500 ساله
    پست
    320

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    فرض کنید پروسه شما تو یک حلقه انجام میشه
    For i=1 to 1000
    دستور خیلی سنگین
    Application.DoEvent
    دستور بازم خیلی سنگین
    Application.DoEvent
    Next i

    بعد از اجرای دستور به خاصر اینکه پردازش خیلی سنگینه با دستور Application.DoEvent باعث Refresh شدن صفحه میشه و شما میتونی تصویرو ببینی

    نکته: بعضی ها میگن استفاده زیاد از این دستور باعث کاهش سرعت میشه ولی من به شخصه تو پردازشهای خیلی سنگین اینو امتحان کردم .یکبار بدون Application.DoEvent و یکبار هم با چندین بار استفاده از اون لابلای دستورات ولی زمان اتمام کار در هر دو حالت یکی بود

  14. #14
    کاربر دائمی آواتار DoDoklak
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شهر 3500 ساله
    پست
    320

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    به کمک دستورات فوق می توانید زمان اجرای دستورات را بدست آورید .

    کد:
    Dim a As New Diagnostics.Stopwatch a.Start() Me.Text = Strings.StrDup(1000, "a") a.Stop() MsgBox(a.ElapsedMilliseconds) a.Start() Dim s As String For i As Integer = 1 To 1000 s += "a" Next Me.Text = s a.Stop() MsgBox(a.ElapsedMilliseconds
    با تشکر
    البته این محاسبته زمان زیاد کارایی نداره چون زمان محایبات وابسته به محیط تغییر میکنه مثلا اگر هدف کار با بانک اطلاعاتی باشه بسته به نوع بانک تو رکوردهای کم و زیاد زمان فرق میکنه و توشبکه بستگی به سرعت تجهیزات و ترافیک شبکه داره.
    اصلا محاسبه زمان اتمام عملیات همیشه در حد ضعیفیه. خود ویندوز تو کپی کردن همیشه زمان کپی رو پس و پیش میبره و گاهی هم زمان انجام عملیات یا زودتر تموم میشه یا دیرتر

  15. #15
    کاربر دائمی آواتار shahab2025
    تاریخ عضویت
    دی 1386
    محل زندگی
    تا شعاع فعالیت کیبرد بیسیم خودم
    پست
    516

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    سلام
    من هم همين مشكل را دارم
    ولي فعاليتهاي من بيشتر در سمت sql انجام ميشه؟؟؟

    نقل قول نوشته شده توسط DoDoklak مشاهده تاپیک
    فرض کنید پروسه شما تو یک حلقه انجام میشه
    For i=1 to 1000
    دستور خیلی سنگین
    Application.DoEvent
    دستور بازم خیلی سنگین
    Application.DoEvent
    Next i

    بعد از اجرای دستور به خاصر اینکه پردازش خیلی سنگینه با دستور Application.DoEvent باعث Refresh شدن صفحه میشه و شما میتونی تصویرو ببینی

    نکته: بعضی ها میگن استفاده زیاد از این دستور باعث کاهش سرعت میشه ولی من به شخصه تو پردازشهای خیلی سنگین اینو امتحان کردم .یکبار بدون Application.DoEvent و یکبار هم با چندین بار استفاده از اون لابلای دستورات ولی زمان اتمام کار در هر دو حالت یکی بود
    فكر ميكنيد اين روش براي من هم موثر هست؟؟؟

  16. #16
    کاربر دائمی آواتار DoDoklak
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شهر 3500 ساله
    پست
    320

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    فكر ميكنيد اين روش براي من هم موثر هست؟؟؟
    بله موثر هست چون همون دستور پردازش مربوط به بانکتون هم میتونه فرم رو قفل کنه و با این دستور refresh میشه

  17. #17

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    شما چجوری بدون اینکه یک thread دیگه را فعال کنید این کار را می کنید؟( در web application ها از application.doevent نمی شه استفاده کرد ( یعنی حداقل من بلد نبودم استفاده کنم ولی با thread ها مشکلم حل شد.)

    یک سری به این لینک بزنید ...

    http://www.simple-talk.com/dotnet/as...es-in-asp.net/

  18. #18
    کاربر دائمی آواتار DoDoklak
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شهر 3500 ساله
    پست
    320

    نقل قول: مطلع کردن کاربر از زمانبر بودن عملیات

    در web application ها از application.doevent نمی شه استفاده کرد ( یعنی حداقل من بلد نبودم استفاده کنم ولی با thread ها مشکلم حل شد.)
    Application.Doevent برای WinApplication کاربر داره نه برای WEB
    ولی در کل تو پردازشهای سنگین استفاده از Threat بسیار موثر و سازنده است ولی به طبع خود threat ها مشکلاتی در پیش دارند مخصوصا هنگامی که Threat ها احتیاج به خواندن و نوشتن اشتراکی بر روی یک داده دارند که در صورت عدم کنترل صحیح باعث اشتباهات بزرگی خواهد شد.
    در کل Application.Doevent یک راهکار راحت و ساده است.

    ولی تو بعضی شرایط شاید جوابگو نباشه
    فرض کنیدیک پردازش سنگین داریم

    پردازش1
    Application.Doevent

    مسلما تا پردازش1 به اتمام نرسه Application.Doevent اجرا نمیشه و فرم تا اتمام پردازش1 قفل میمونه

    جهت جلوگیری از این حالت چند راه داره:
    1- اگه پردازش1 خودش کارهای متنوعی انجام میده باید داخل خود پردازش1 از Application.Doevent به نحوه مناسب استفاده بشه

    2- پردازش های اینچونینی رو باید تبدیل به چند تا پردازش سبکتر کرد تا راحتر اجرا بشه و سیستم هنگ نکنه
    پردازش1
    Application.Doevent
    پردازش2
    Application.Doevent
    پردازش3

    3-اگه نمیشه پردازش مربوطه رو کوچیک کرد و یا داخلش از Application.Doevent استفاده کرد(مثلا حالتی که یک Query سنگین به بانک میفرستی و باید منتظر جواب باشی) تنها راه استفاده از همون Threat است ولی همونطور که گفتم باید تو مدیریتش وسواس به خرج بدی تا دچار تداخل نشن(که البته میشه با تکنیک بافر چرخشی اونو مدیریت کرد)

    البته با رعایت تمام نکات مربوطه هم ، انتظار و یا حتی کمی قفل شدن بازم طبیعیه و به احتمال زیاد تو حجمهای بالا بازم به وجود میاد ولی قابل تحمله

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •