السلام عليكم
لدي مشروع يحتوي على ( زر + صورة جيف متحركه تدل على البحث ) عند النقر على الزر اريد ان تظهر الصوره لكي يفهم
المستخدم انه جاري البحث
هذه هي تسلسل الكود داخل الزر :
1- إظهار الصورة المتحركه
2 - أكواد البحث من الانترنت وجلب المطلوب
3- إخفاء الصوره المتحركه
المشكله هي تعليق البرنامج ( البرنامج لا يستجيب ) عند البحث في الانترنت لذلك لا تظهر الصوره أثناء تعليق البرنامج وعند انتهاء
البحث ينتهي التعليق لكن مع اخفاء الصوره كيف اجعل كود البحث لا يأثر على البرنامج ... قرأة عن Thread ولكن لأعرف كيف
اتعامل معه ممكن مساعده ...
مساعده في عمل Thread
نعم اخي الكريم،
انت بالضبط بحاجة ل thread، هناك عدة تقنيات.
الابسط باستخدام thread
1. ننشأ Thread جديدة. ونسند إليها مهمة الحسابات والمعالجة.
2. عن حدث معين (ضغط زر) نقوم بإضهار الصورة (المسؤول عنها هو UI Thread). ونقوم بتشغيل Thread الجديدة.
3. بعد انهاء عملية الحساب نقوم بإخفاء الصورة.
ملاحظة: يجب عدم تداخل عمل ال Threads ببعضها، فلا يجوز ل thread الجديدة ان تتحكم بالصورة لانها ليست ملكها بل ملك UI Thread كما قلنا.
لذلك نقوم بأخفاء الصورة بطلب من UI thread.
اليك المرفق الصغير.
وهذا موضوع جيد ومفيد: البرمجة متعددة المهام Multithreading
بالتوفيق،،،
• • •
[ ربيّ احفظ سوريا الحبيبة]

شكرا لك أخي على هذه المعلومات
انا أضفت الثرد إلى مشروعي واجهتني بعض الأخطأ حاولت أن أوجد لها حل لكني مبتدأ في هذه التقنيه ( مع العلم ان الكود صحيح كان يعمل قبل أضافة الثرد )
هذا هو الكود
private void pictureBox18_Click(object sender, EventArgs e)
{
pictureBox20.Visible = true;
Thread th = new Thread(goo);
th.Start();
}
public void goo()
{
Translator t = new Translator();
t.SourceLanguage = (string)this._comboFrom.SelectedItem;
t.TargetLanguage = (string)this._comboTo.SelectedItem;
t.SourceText = this._editSourceText.Text;
this.richTextBox1.Text = string.Empty;
this.richTextBox1.Update();
this._translationSpeakUrl = null;
try
{
this.Cursor = Cursors.WaitCursor;
this._lblStatus.Visible = true;//"Translating..."
this._lblStatus.Update();
t.Translate();
this.richTextBox1.Text = t.Translation;
this.richTextBox1.Update();
this._translationSpeakUrl = t.TranslationSpeakUrl;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
finally
{
//this._lblStatus.Text = string.Format("Translated in {0} mSec", t.TranslationTime.TotalMilliseconds);
pictureBox20.Visible = false;
this._lblStatus.Visible = false;// "Translating..."
this.Cursor = Cursors.Default;
}حيث كان الأخطأ ( عملية مسار تنفيذ متداخل غير صالحة: تم الوصول إلى عنصر التحكم '_comboFrom' من مسار تنفيذ غير ذلك الذي تم إنشاء عنصر التحكم نفسه فيه. )
انا أستخدم C# 2008
يوجد خظأ عند تشغيل مشروعك الذي ارسلته في Tasks
using System.Threading.Tasks;
اريد ان اضيف هذه المكتبة إلى مشروعي ما اسم هذا المكتبة لكي أبحث عنها في الانترنت
توجد علامه تعجب صفرا على المكتبة Microsoft.CSharp في مشروعك الذي ارسلته
والعفو على الإطاله ...
بسم الله الرحمن الرحيم
الخطأ الواضح لديك، كنت قد اشرت له في ملاحظة ضمن تعليقي السابق.
لا يجوز أن يتداخل عمل ال threads بععضها ببعض، مثلا UI Thread هي المسؤولة عن الواجهة وادواتها مثل textBox, ComboBox, Label لذلك لا يحق لأي Thread اخرى التعديل على احدى هذه الادوات او حتى استخدامها. كل ما تستطيع عمله هو اخبار UI Thread للقيام بتعديل معين.
كمثال واقعي: لنفرض لدينا كمية معينة من المواد، بحاجة لنقلها إلى مدينة أخرى، أفضل طريقة لتسريع العمليه، هو بزيادة عدد سيارات النقل (Threads)، حيث ستقوم كل سيارة بنقل جزء معين، فأصبح تنفيذ العملية أسرع، لكن لا يمكن لسيارة معينة التحكم بمواد السيارة الأخرى، فلكل سيارة موادها الخاصة ( موارد thread).
بالتالي تستطيع السيارة الأولى اخبار السيارة الثانية مثلأ انها انهت عملية تنزيل موادها، وحان دور السيارة الثانية.
الأمر مشابه لل threads.
ضمن مثالك الميثود goo خاصة ب th thread الجديدة، لذلك يجب أن تحوي على موادها الخاصة، وبحالة أرادت التعديل على عناصر الواجهة، فإنها تطلب من UI Thread عمل ذلك، الأمر موضح بالمثال باستخدام Invoke.
والأهم: أن عمل thread ذائما يكون مقصور على العمليات الحسابية الطويلة أو الاتصال بقاعدة البيانات. واذا كانت هذه ال thread تتطلب بيانات معينة موجودة على الواجهة مثلا قيمة textBox، لذلك نقوم بحفظ هذه القيمة ضمن متغير عام string، قبل طلب ال thread الجديدة.
أرجو أن تكون النقاط واضحة.
• • •
[ ربيّ احفظ سوريا الحبيبة]

الحمد لله أنتهت المشكلة
استخدمة Invoke
شكرا لك أخي على هذا التعاون