У меня есть список, который я заполняю из запроса веб-сервиса.Проблема заключается в том, что если http-запрос медленный из-за сети или неправильный URL-адрес, запрос на некоторое время останавливает интерфейс пользователя.Итак, мой вопрос: как мне скинуть это на сторонний процесс и заполнить список в фоновом режиме?
Вот как я получаю данные, и они обычно хранятся в течение 30 секунд или более по запросу. GetResponse ();Я возвращаю JSON и анализирую это, но эта функция - задержка, и я хотел бы кое-что обернуть.Так как бы я сделал это конкретно?
public static String get(String url) {
StringBuilder sb = new StringBuilder();
// used on each read operation
byte[] buf = new byte[32768];
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.Timeout = 10000;
HttpWebResponse response;
try {
response = (HttpWebResponse)request.GetResponse();
} catch (WebException we) {
return "ERROR!"
}
Stream resStream = response.GetResponseStream();
... read from stream and parse
}
#### Использование предложения рабочего потока ############
Это тоже не работает.
// create new thread
new Thread(new ThreadStart(myTable) ).Start();
внутри метода myTable с использованием анонимного делегата, я думаю, это может быть лучшим способом.
private void myTable() {
if (this.InvokeRequired) {
this.Invoke(new EventHandler(delegate(object obj, EventArgs a) {
// do work here
String url = "http://someurl....";
// Set the view to show details.
listView1.View = View.Details;
// Display check boxes.
listView1.CheckBoxes = false;
// Select the item and subitems when selection is made.
listView1.FullRowSelect = true;
listView1.Items.Clear();
listView1.Columns.Clear();
listView1.Columns.Add(Resources.MainColumn0, 20, HorizontalAlignment.Left);
listView1.Columns.Add(Resources.MainColumn1a, 250, HorizontalAlignment.Left);
listView1.Columns.Add(Resources.MainColumn2, 150, HorizontalAlignment.Left);
try {
// Call the function mentioned above to get the data from the webservices....
string users = get(urlUsers);
.............