Простой способ (хотя и не пуленепробиваемый):
private void NewsRefresh_Click(object sender, RoutedEventArgs e)
{
try
{
NewsRefresh.Enabled = false;
var vm = this.DataContext as MainPageViewModel;
if (vm != null)
{
vm.UpdateNews();
}
}
finally
{
NewsRefresh.Enabled = true;
}
}
Более сложный подход потребовал бы более подробной информации о том, что именно является MainPageViewModel, и что делает UpdateNews ().По сути, вам нужно хранить значение состояния там, где вы храните экземпляр WebClient.Перед использованием WebClient вам необходимо проверить, используете ли вы его уже.Проблема возникает, когда несколько потоков могут работать в одном экземпляре или если вы выполняете несколько операций (кроме UpdateNews).Когда задействованы несколько потоков, проще всего окружить использование WebClient Mutex .
Конечно, другой вариант - не использовать экземпляр WebClient повторно, а создать новый.для каждого нового запроса.
ОБНОВЛЕНИЕ
Ну, хорошо, использование DownloadStringAsync, безусловно, принесет радость.Вышеприведенный код Отключение пользовательского интерфейса не будет работать, если вы не переместите код повторного включения.Проще всего пойти с моим последним предложением и просто создать новый экземпляр WebClient.Я не очень люблю WebClient и предпочитаю использовать WebRequest.Create .