2014-09-07 2 views
0

Я просто играю в визуальной студии и сделал небольшое приложение.Тяжелый лаг, получающий объект json из Интернета в форме C#

Я могу сделать это на Java примерно через 20 минут, но поскольку у меня нет опыта работы с C#, это немного сложнее, так как я не знаю многих его методов.

Таким образом, я создал простую форму с тремя элементами управления - кнопкой, меткой и текстовым полем.

Кнопки onClick метода выполняют метод getPrice, указанный ниже. Грубо прокомментировав, он подключается к веб-сайту и захватывает объект json.

Поскольку я не знаю, как использовать json в C#, я обработал его, вырезав подстроку, которая должна быть текущей ценой биткойна для этого рынка, с API которого я извлекаю данные.

Моя проблема заключается в том, что при нажатии кнопки «Получить цену» приложение приостанавливается и не отвечает на запросы, а затем в конечном итоге устанавливает новые данные о ценах в поле textBox1.

Есть что-то в моем коде, вызывающем задержку, или это только потому, что я использую веб-запрос? Я имею в виду, что я смог выполнить это одно и то же действие (но с использованием json-элемента вместо подстроки) на Java без задержки, поэтому, я думаю, я не получу его.

private void getPrice() 
    { 
     string[] result; 
     var json = new System.Net.WebClient().DownloadString("https://btc-e.com/api/2/btc_usd/ticker"); 
     int startIndex = json.IndexOf("last\":"); 
     int endIndex = json.IndexOf(",\"buy\"", startIndex); 
     string amountString = json.Substring(startIndex + 6, endIndex - startIndex - 7); 
     textBox1.Text = amountString; 
    } 
+0

Используйте 'ждать WebClient.DownloadStringAsync (....)' и пометит '' метод getPrice' async'. Это перемещает операцию из потока GUI. – Zer0

ответ

0

WebClient блокирует поток пользовательского интерфейса. Такие операции должны выполняться в фоновом потоке. Если вы используете C# 5, изучите шаблон async/await и используйте его с классом HttpClient.

Example code

Смежные вопросы