Не отвечающее окно - PullRequest
       14

Не отвечающее окно

0 голосов
/ 29 октября 2009

Мой код вызывает метод веб-службы , который для выполнения операции занимает несколько минут. В это время мое окно перестает отвечать на запросы и отображает полный белый экран.

Я не хочу вызывать метод из другого потока.

Это лучший способ справиться с этим?

Среда: C #, веб-сервис

Ответы [ 3 ]

2 голосов
/ 29 октября 2009

BackgroundWorker - ваш друг.

Вот пример того, как я использую BackgroundWorker с WebService. По сути, нет способа выполнять интенсивные операции на стороне пользовательского интерфейса без использования отдельного потока. BackgroundWorker - это самый удобный способ работы в отдельном потоке.

1 голос
/ 29 октября 2009

Чтобы иметь отзывчивый пользовательский интерфейс, вы должны использовать другой поток.

Но если вы используете Visual Studio, сгенерированный клиентский класс имеет асинхронные сигнатуры методов, которые сделают это за вас. Если ваш метод «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;
}
0 голосов
/ 29 октября 2009

Вы можете сделать запрос в отдельном потоке, который оставит поток пользовательского интерфейса отзывчивым. После завершения вам нужно будет синхронизировать ответ обратно в поток пользовательского интерфейса.

...