سؤال

أحاول استخدام كائن microsoft.sqlserver.management.smo.restore لاستعادة قاعدة بيانات SQL Server 2000. قبل أن أبدأ عملية الاستعادة ، أقوم بتغيير نص التسمية حتى يعرف المستخدم ما يجري. ومع ذلك ، فإن النص الذي تم تغييره غير مرئي على واجهة المستخدم الرسومية (أي ، يبقى النص كما كان) حتى بعد خط fullrestore.wait ().

lblStatus.Text = "Restoring Database";
Restore fullRestore = new Restore(); 

// Configure fullRestore

fullRestore.SqlRestore(_server);
fullRestore.Wait();

الشيء الغريب هو أن LBLSTATUS يعرض في النهاية "استعادة قاعدة البيانات" ، ولكن ليس حتى بعد، بعدما الاستعادة كاملة. أيه أفكار؟

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

المحلول

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

نصائح أخرى

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

لا يمكن أن يحدث تحديث واجهة المستخدم الرسومية حتى تنتهي من المعالجة على الخيط الأمامي وإطلاقه. تحتاج إلى القيام بالاستعادة على مؤشر ترابط الخلفية للسماح لخيط المقدمة بمواصلة تحديث واجهة المستخدم الرسومية. فكر في وضع رمز الاستعادة بطريقة منفصلة واستخدام threadpool.queueUserworkItem (), ، وتمرير طريقة الاستعادة. سيؤدي ذلك إلى قيام طريقة الاستعادة الخاصة بك على مؤشر ترابط بركة مؤشرات الترابط.

إذا كنت بحاجة إلى مزيد من التحكم في الخيط والإخطار عند الانتهاء ، فيمكنك استخدام ملف عمال الخلفية

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top