سؤال

لقد شكل عرض التقدم رسائل طويلة نسبيا تشغيل العملية.إنها دعوة إلى خدمة ويب لذا لا يمكنني أن تظهر النسبة الرقم الكامل في شريط تقدم مجدية.(أنا لا سيما مثل سرادق الملكية شريط التقدم)

أود أن تظهر صورة GIF متحركة لإعطاء عملية يشعر بعض النشاط (مثلا ، الملفات ترفع من جهاز كمبيوتر واحد إلى آخر مثل ويندوز عملية نسخ).

كيف يمكنك أن تفعل هذا ؟

هل كانت مفيدة؟

المحلول

فإنه ليس من الصعب جدا.

  1. قطرة picturebox على النموذج الخاص بك.
  2. إضافة .ملف gif كصورة في picturebox
  3. تظهر picturebox عند التحميل.

الأمور التي تأخذ بعين الاعتبار:

  • تعطيل picturebox منع gif من الرسوم المتحركة.

صور متحركة:

إذا كنت تبحث عن صور متحركة يمكن أن تولد لهم هنا

طريقة أخرى للقيام بذلك:

طريقة أخرى أنني وجدت أنه يعمل بشكل جيد جدا هو المتزامن التحكم الحوار التي وجدت على رمز المشروع

نصائح أخرى

وكان لي نفس المشكلة. شكل كامل (بما في ذلك GIF) وقف لإعادة رسم نفسه بسبب عملية طويلة في العمل في الخلفية. هنا هو كيف يمكنني حل هذه.

  private void MyThreadRoutine()
  {
   this.Invoke(this.ShowProgressGifDelegate);
   //your long running process
   System.Threading.Thread.Sleep(5000);
   this.Invoke(this.HideProgressGifDelegate);
  }

  private void button1_Click(object sender, EventArgs e)
  {
   ThreadStart myThreadStart = new ThreadStart(MyThreadRoutine);
   Thread myThread = new Thread(myThreadStart);
   myThread.Start(); 
  }

وأنا ببساطة خلق ترابط آخر ليكون مسؤولا عن هذه العملية. وبفضل هذا النموذج الأولي لا يزال إعادة رسم دون مشاكل (بما في ذلك بلدي العمل GIF). ShowProgressGifDelegate وHideProgressGifDelegate هي المندوبين في شكل تعيين الخاصية مرئية من pictureBox مع GIF لصح / خطأ.

لاحظ أن في ويندوز، التي عادة لا تستخدم متحركة الرسوم المتحركة، ولكن القليل الرسوم المتحركة AVI: هناك سيطرة الأم ويندوز فقط لعرضها. هناك أدوات حتى لتحويل متحركة المتحركة لافي (والعكس بالعكس).

إذا وضعها في عنصر تحكم PictureBox، فإنه يجب أن تعمل فقط

وولا عند بدء عملية طويلة وراء، لأن كل شيء يتوقف منذ كنت في نفس الموضوع.

وكان لي نفس القضية، وجاءت عبر حلول مختلفة عن طريق تنفيذ التي اعتدت على مواجهة العديد من القضايا المختلفة. وأخيرا، وفيما يلي ما أضع بعض القطع من المشاركات المختلفة معا والتي عملت بالنسبة لي كما هو متوقع.

private void btnCompare_Click(object sender, EventArgs e)
{
    ThreadStart threadStart = new ThreadStart(Execution);
    Thread thread = new Thread(threadStart);
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
}

وهنا هو طريقة التنفيذ التي تحمل أيضا استدعاء تحكم PictureBox:

private void Execution()
{
    btnCompare.Invoke((MethodInvoker)delegate { pictureBox1.Visible = true; });
    Application.DoEvents();

    // Your main code comes here . . .

    btnCompare.Invoke((MethodInvoker)delegate { pictureBox1.Visible = false; });
}

ونضع في اعتبارنا، وPictureBox غير مرئية من إطار خصائص أو القيام أدناه:

private void ComparerForm_Load(object sender, EventArgs e)
{
    pictureBox1.Visible = false;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top