سؤال

ورمز بلادي يدعو ل خدمة ويب طريقة حيث يستغرق بضع دقائق لتنفيذ العملية. وخلال ذلك الوقت يصبح نافذتي غير متجاوب وهذا يظهر شاشة بيضاء كاملة.

وأنا لا أريد أن طريقة مكالمة من موضوع مختلف.

وانها أفضل طريقة للتعامل مع ذلك؟

والبيئة: C #، خدمة الإنترنت

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

المحلول

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

نصائح أخرى

BackgroundWorker هو صديقك.

وهنا مثال لكيفية يمكنني استخدام BackgroundWorker مع خدمة ويب. في الأساس، وليس هناك طريقة للقيام بعمليات مكثفة على الجانب UI دون استخدام موضوع منفصل. وBackgroundWorker هو اجمل طريقة ليعمل على موضوع منفصل.

لديك UI استجابة، يجب عليك استخدام موضوع آخر.

ولكن اذا كنت تستخدم استوديو البصرية، وفئة العميل ولدت لديها تواقيع طريقة غير متزامن اللي تبونه أن تفعل ذلك بالنسبة لك. إذا الأسلوب الخاص بك هو "GetData"، ثم يجب أن يكون وسيلة تسمى "GetDataAsync" اللي تبونه لن تجميد الإطار الخاص بك.

وهنا مثال:

WsClient client;
protected override void Load() {
    base.Onload();
    client = new WsClient();
    client.GetDataCompleted += new GetDataCompletedEventHandler(client_GetDataCompleted);
}

//here is the call
protected void Invoke()
{
    client.GetDataAsync(txtSearch.Text);
}

//here is the result
void client_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
    //display the result
    txtResult.Text = e.Result;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top