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

نام تاپیک: Progress Bar

  1. #1

    Question Progress Bar

    آقا نگین سرچ کنا.
    من کردم
    پیدام کردم
    ولی یا به کارم نیمده
    یا ارور میداده.

    من یک فرم 2 لودینگ دارم.
    یک فرم 1 دیگر هم دارم که تووش درخته و این درخته توسط تابع مثلا ایکس پر میشه.

    تابع ایکس در لود فرم 1 است.(هنگ بودن سیستم هم همینجاست).
    (در مجموع بگم که پر شدن درخت در هنگام بالا اومدن فرم 1 باید انجام بشه)

    حالا میخوام فرم 1 که داره لود میشه و درخت پر میشه،لودینگ نمایش بده.
    فقط یک مسئله که میخوام حداقل 2 ثانیه لودینگ نمایش داده بشه،حتی اگر نیاز نبود.
    اگرم که نیازه که به اندازه نیازش لودینگ رو نمایش بده.
    (البته اگه اینم نشد،مشکلی نیس،فقط لود بیاد و بره به اندازه)

    در آخرم این فرم 2 لودینگ بسته بشه.

    من میدونم که با اینا باید کار کرد ولی یا ارور میده یا نمیشه:
    Invoke
    Thread
    BackgroundWorker
    Delegate
    Timer

    لطفا کامل توضیح بدین دوستان
    _____________________
    مشکل اینجاست که من تابع پر کردن درختام(تابع ایکس) توو لود فرم 1 است.

    وقتی اون تابع رو میام میزارم توو DoWork این ارور میاد:
    Cross-thread operation not valid: Control 'TrvCoding' accessed from a thread other than the thread it was created on.

    TrvCoding هم اسم درخته.

    واسه همین میام این رو میزارم بالا سر تابه ایکس:
    CheckForIllegalCrossThreadCalls = false;

    بعد این ارور رو توو DoWork میده:

    Action being performed on this control is being called from the wrong thread. Marshal to the correct thread using Control.Invoke or Control.BeginInvoke to perform this action.

    (آخه اومدم تابع ایکس رو گذاشتم توو DroWork . نذارمم که اصلا سودی نداره و لودینگی نمیشه!)

    بعد واسه رفع این ارور ، این ایـــــــــف رو میذارم:

    if (TrvCoding.InvokeRequired == false)
    {
    TvfCoding.LoadTreeFullData();
    }
    ولی باز لودینگی نمیبینم.
    یعنی هستا ولی 1 میلیونم ثانیه.
    اصلا میگیم اینا که من گفتم کار کنه،
    من میخوام حداقل 2 ثانیه لودینگ بده.

    چرا false?
    چون اگه true باشه،
    Cross-thread operation not valid: Control 'TrvCoding' accessed from a thread other than the thread it was created on.
    میاد!!!
    حقم داره ، چون داره توو لود فرم 1 ، تابع ایکس یک بار میاد.
    البته این خط رو هم کامنت کردم ولی در مجموع کار نمیکنه!

    حالا چطور من تابه DoWork رو توو لودینگ فرم 1 بیارم؟آیا راه اینه؟اگه آره،مشکل توو این قسمته:
    backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)

    و

    private void form1_Load(object sender, EventArgs e)

    که نوع E یکی نیس!

    Cast هم نمیشه.ارور میده.

    آگه راه هم این نیس، راه لطفا
    _____
    هرچی مثال توو نت است،اومدن عملیاتشون رو توو دگمه نوشتن.
    ولی مال من توو لود است
    آخرین ویرایش به وسیله dr_jacky_2005 : یک شنبه 28 شهریور 1389 در 14:15 عصر

  2. #2
    کاربر دائمی آواتار saied_genius
    تاریخ عضویت
    آبان 1386
    محل زندگی
    IRAN فعلاً ...
    پست
    595

    نقل قول: Progress Bar

    سلام

    ببینید ، اگر فقط هدفتان نمایش متن "لطفاً منتظر باشید ..." است. راحتترین راه این است:

    1- یک label وسط فرم قرار دهید.

    2- visible آنرا false کنید.

    3- پس از اینکه بر روی گزینه مورد نظر کلیک شد ، پیغام نشان داده شود ، پس از اتمام کار دوباره invisable شود.

    باز هم اگر فکر می کنید نیاز به multi threading دارید ، بگویید تا یک مثال برایتان بگذارم .

    --------------------
    در مورد error هایی که به شما می دهد، به این دلیل است که شما می خواهید از یک thread دیگر ، thread فرم خود را مقدار دهی کنید (Cross Threading) ، که در حالت عادی امکان پذیر نیست.

    موفق باشید.
    آخرین ویرایش به وسیله saied_genius : یک شنبه 28 شهریور 1389 در 17:49 عصر دلیل: این پست به دلیل تکراری بودن به طور خودکار ادغام شده است.

  3. #3

    Question نقل قول: Progress Bar

    نقل قول نوشته شده توسط saied_genius مشاهده تاپیک
    سلام

    ببینید ، اگر فقط هدفتان نمایش متن "لطفاً منتظر باشید ..." است. راحتترین راه این است:

    1- یک label وسط فرم قرار دهید.

    2- visible آنرا false کنید.

    3- پس از اینکه بر روی گزینه مورد نظر کلیک شد ، پیغام نشان داده شود ، پس از اتمام کار دوباره invisable شود.

    باز هم اگر فکر می کنید نیاز به multi threading دارید ، بگویید تا یک مثال برایتان بگذارم .

    --------------------
    در مورد error هایی که به شما می دهد، به این دلیل است که شما می خواهید از یک thread دیگر ، thread فرم خود را مقدار دهی کنید (Cross Threading) ، که در حالت عادی امکان پذیر نیست.

    موفق باشید.
    ممنون از توجهتون
    ولی نه،لیبل نمیخوام.
    تازه،میخوام یک فرم درست کنم که توو همه فرم های پروژه ام استفاده کنم.
    لطفا ازmultiThreading یک مثال بزنید.
    فقط لطفا مثالتون رو مثل فرم من شبیه سازی کنید.
    یعنی 2 تا فرم.
    1 لودینگ
    1 گرید.
    تابع پر شدن گرید در لود شدن فرم گرید دار باشه.

  4. #4
    کاربر دائمی
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    مشهد
    پست
    251

    نقل قول: Progress Bar

    اگر vb ميدانيد يك نمونه برايتان بگذارم

  5. #5
    کاربر دائمی آواتار saied_genius
    تاریخ عضویت
    آبان 1386
    محل زندگی
    IRAN فعلاً ...
    پست
    595

    نقل قول: Progress Bar

    سلام
    نمونه ای که ضمیمه کردم ، یک نمونه کامل است.

    سعی کردم به ساده ترین نحو پیاده کنم ، دیگه نمی دونم.

    پروژه با VS2010 است (ورژن پایین تر ندارم)

    امیدوارم استفاده کنید.

    سوالی بود در خدمتم.

    موفق باشید.
    فایل های ضمیمه فایل های ضمیمه

  6. #6
    کاربر دائمی
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    مشهد
    پست
    251

    نقل قول: Progress Bar

    جهت اتمام كار j=2000 قرار بدهيد
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar 1.rar‏ (61.3 کیلوبایت, 78 دیدار)

  7. #7
    کاربر دائمی آواتار saied_genius
    تاریخ عضویت
    آبان 1386
    محل زندگی
    IRAN فعلاً ...
    پست
    595

    نقل قول: Progress Bar

    نقل قول نوشته شده توسط غلامرضا شریفی مشاهده تاپیک
    جهت اتمام كار j=2000 قرار بدهيد
    روی فرم 2 کلیک کنیم ، هنگ می کند !!!

  8. #8
    کاربر دائمی
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    مشهد
    پست
    251

    نقل قول: Progress Bar

    روی فرم 2 کلیک کنیم ، هنگ می کند !!!
    معمولا وقتي از فرمي جهت انتظار استفاده ميشود نبايد طوري باشد كه قابل حركت و بسته شدن باشد من بخاطر اينكه فقط خواستم نحوه كار را نشان بدهم فرم 2 را بشكل صحيح خود طراحي نكردم در بالا هم توضيح دادم شما وقتي كارتان تمام شد بايد j=2000 شود يا j>105 شود فرقي نمي كند تا فرم دو اتومات بسته شود
    روي فرم دو اگر كليك شود هنگ نميكند فقط هنگامي كه دبل كليك و يا جابجايي انجام شود Progress Bar استپ ميكند ولي برنامه از كار نمي افتد در پشت صحنه فرمانها اجرا ميشود تا به j=2000 برسد اگر خط اول همين پاسخ را اجرا كنيد مشكلي پيش نمي ايد
    اگر را حل اينكه Progress Bar استپ ميكند يافتيد من هم از راهنمايي شما سپاسگزار خواهم بود

  9. #9
    کاربر دائمی آواتار saied_genius
    تاریخ عضویت
    آبان 1386
    محل زندگی
    IRAN فعلاً ...
    پست
    595

    نقل قول: Progress Bar

    هدف از ایجاد thread جدید ، هنگ نکردن فرم انتظار است.

    من خیلی روی کد شما دقت نکردم ، ولی در نمونه کدی که من گذاشتم شما هم می توانید فرم را جابجا کنید و هم روی اون کلیک و دابل کلیک کنید و هیچ مشکلی پیش نمی آید (نباید مشکلی پیش بیاید).

    وقتی فرم انتظار در thread مجزا اجرا می شود ، دیگری دلیلی بر هنگ کردن (حتی ظاهری) نباید وجود داشته باشد.

    سوالی بود در خدمتم.

    موفق باشید.

  10. #10
    کاربر دائمی
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    مشهد
    پست
    251

    نقل قول: Progress Bar

    هدف از ایجاد thread جدید ، هنگ نکردن فرم انتظار است.

    من خیلی روی کد شما دقت نکردم ، ولی در نمونه کدی که من گذاشتم شما هم می توانید فرم را جابجا کنید و هم روی اون کلیک و دابل کلیک کنید و هیچ مشکلی پیش نمی آید (نباید مشکلی پیش بیاید).

    وقتی فرم انتظار در thread مجزا اجرا می شود ، دیگری دلیلی بر هنگ کردن (حتی ظاهری) نباید وجود داشته باشد.

    سوالی بود در خدمتم.

    موفق باشید.
    دوست عزيز ميشود بفرماييد Progress Bar برنامه اي كه در اينجا قرار داده ايد كجا هست كه با جابجايي و دبل كليك هنگ نكند يك ليبل در فرم شما هست كه نمي دانم چطور ميخواهد هنگ كند
    ضمنا برنامه اي كه قرار دادم هنگ نمي كند فقط Progress Bar استپ ميكند اگر تنظيماتي كه در پاسخ بعدي گفته شد رعايت شود مشكلي پيش نمي ايد

  11. #11
    کاربر دائمی آواتار hamid.shekasteh
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    شیراز
    پست
    192

    نقل قول: Progress Bar

    پس چرا C#‎‎ نگذاشتید !!! اینجا که بخش vb نیست !
    ابن جا دو نمونه نوشتم ، ببینید:

    http://www.barnamenevis.org/sh...d.php?t=248607
    http://www.barnamenevis.org/sh...=237267&page=3

  12. #12

    Question نقل قول: Progress Bar

    من یک فرم لودینگ دارم که تووش پروگرس بار است.
    یک فرم هم دارم که تووش درخت است و با تابعی پر از دیتا میشود.
    اینگونه عمل کرده ام:
    این رو نوشتم توو فرم که درخت تووشه که بتونم فرم لودینگ رو شو کنم:
    LoadingForm frmp;


    اینم توو لود فرمه که تووش درخته:
    frmp = new LoadingForm();
    frmp.Show();
    this.Cursor = Cursors.WaitCursor;
    backgroundWorker1.RunWorkerAsync();


    اینم توو دوو ورک بکگرادنورکر:
    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
    int returnedRecordCount = 100;
    for (int i = 1; i <= returnedRecordCount; i++)
    {
    if (this.backgroundWorker1.CancellationPending)
    {
    e.Cancel = true;
    return;
    }
    this.backgroundWorker1.ReportProgress(i);

    System.Threading.Thread.Sleep(20);
    }
    if (TrvCoding.InvokeRequired)
    {

    TrvCoding.Invoke(new MethodInvoker(delegate { TvfCoding.LoadTreeFullDate(); }));

    //TvfCoding.LoadTreeFullDate();
    }
    }


    اینم توو کامپلیت:
    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
    this.Cursor = Cursors.Default;
    frmp.Close();
    //frmp.Hide();
    }


    اینم وقتی که فرمه که تووش درخته،دارخ بسته میشه:
    private void HesabStateWorkForm_FormClosed(object sender, FormClosedEventArgs e)
    {
    if (this.backgroundWorker1.IsBusy) this.backgroundWorker1.CancelAsync();
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
    if (e.ProgressPercentage <= this.frmp.progressBar1.Maximum)
    {
    this.frmp.progressBar1.Value = e.ProgressPercentage;
    }
    }


    اینم توو لود فرم لودینگ:
    progressBar1.Value = 0;
    for (int x = 0; x < 100; x++)
    {
    if (progressBar1.Value < progressBar1.Maximum)
    {
    //System.Threading.Thread.Sleep(10);
    progressBar1.Value++;
    }
    }


    اینا هم نکته ها:
    دو تا پروپرتی توانایی کنسل کردن و گزارش دادن true است.
    و
    فرم لودینگ هم TopMost = true

    سوالات:
    الآن همه چی میاد،عالی...
    ولی
    اول لودینگ میاد،بعد پر شدن درخت شروع میشه!

    من میخوام هم زمان باشن!


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

    اگر مورد بالا نشد،میخوام که پروگرس بار بلوکی نباشد،marquee باشد.(style)

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

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