У меня есть ListBox с ~ 40-150 пунктов.Когда я нажимаю кнопку «Обновить», мое приложение проверяет наличие новых новостей и сообщений в фоновом потоке.Если есть сообщения или обновления новостей, приложение показывает уведомление.Даже если нет новых новостей или сообщений, мой список обновляется и не отвечает в течение 1-10 секунд.Как я могу отключить обновление в этом случае?Мой код понятен, и эта тема работает в фоновом режиме.У меня также видео проблемы .
private void UpdateNews(object sender, EventArgs e) {
DispatcherTimer timer = new DispatcherTimer() {
};
timer.Tick += (a, b) => {
timer.Stop();
getData("post_upd");
};
timer.Start();
ProgBar.IsIndeterminate = true;
ProgBar.Visibility = System.Windows.Visibility.Visible;
}
public void getData(string filtr) {
lock (this) {
Debug.WriteLine("News: Getting Data");
WebClient c = new WebClient();
WebClient b = new WebClient();
DateTime from = DateTime.Now.AddHours(-30);
if (filtr == "post") {
b.DownloadStringAsync(new Uri("https://api.vkontakte.ru/method/getServerTime?access_token=" + ((App)Application.Current).access_token));
b.DownloadStringCompleted += new DownloadStringCompletedEventHandler(server_time_update);
}
if (filtr == "post_upd") {
DispatcherTimer timer = new DispatcherTimer() {
};
timer.Tick += (a, q) => {
timer.Stop();
b.DownloadStringAsync(new Uri("https://api.vkontakte.ru/method/getServerTime?access_token=" + ((App)Application.Current).access_token));
b.DownloadStringCompleted += new DownloadStringCompletedEventHandler(server_time_update);
c.DownloadStringAsync(new Uri("https://api.vkontakte.ru/method/newsfeed.get?start_time=" + ((App)Application.Current).server_time + "&filters=post" + "&access_token=" + ((App)Application.Current).access_token));
c.DownloadStringCompleted += new DownloadStringCompletedEventHandler(posts_update);
newslistBox.PullSubtext = "Обновлено в " + DateTime.Now.ToString("HH:mm:ss");
};
timer.Start();
}
}
private void after_server_time_update(string filtr) {
WebClient c = new WebClient();
c.DownloadStringAsync(new Uri("...?start_time=" + (((App)Application.Current).server_time - 8600) + "&filters=" + filtr + "&access_token=" + ((App)Application.Current).access_token));
c.DownloadStringCompleted += new DownloadStringCompletedEventHandler(posts_downloaded);
newslistBox.PullSubtext = "Обновлено в " + DateTime.Now.ToString("HH:mm:ss");
}
private void posts_downloaded(object sender, DownloadStringCompletedEventArgs e) {
if (e.Error == null && (NetworkInterface.GetIsNetworkAvailable())) {
lock (this) {
Debug.WriteLine("News: Posts Downloaded online");
string json = e.Result;
var response = JObject.Parse(json);
// Debug.WriteLine(response);
string att_type = "";
list = new List<Data>();
prof_list = new List<Profiles>();
groups_list = new List<Groups>();
Profiles p_item = null;
Groups g_item = null;
#region SWTICH
switch (att_type) {
case "photo":...
break;
case "graffiti":...
list.Add(item);
break;
case "audio":...
};
list.Add(item);
break;
case "link":...};
list.Add(item);
break;
case "note":
item = new Data {...
list.Add(item);
break;
case "post":...
list.Add(item);
break;
case "poll":
item = new Data {....
list.Add(item);
break;
case "video":....
list.Add(item);
break;
}
#endregion
}
this.newslistBox.ItemsSource = list;
ProgBar.IsIndeterminate = false;
ProgBar.Visibility = Visibility.Collapsed;
}
} else {
ToastPrompt toast = new ToastPrompt();
// Debug.WriteLine(who.ToString());
// Debug.WriteLine(who.FirstOrDefault()[4].ToString());
toast.TextOrientation = System.Windows.Controls.Orientation.Vertical;
toast.Title = "Ошибка";
toast.Message = "Нет соединения с интернетом";
toast.MillisecondsUntilHidden = 7000;
toast.Show();
}
}
private void posts_update(object sender, DownloadStringCompletedEventArgs e) {
if (e.Error == null && (NetworkInterface.GetIsNetworkAvailable())) {
lock (this) {
Debug.WriteLine("News: Posts Updated online");
string json = e.Result;
var response = JObject.Parse(json);
if (response["response"]["items"].HasValues) {
// Debug.WriteLine(response);
string att_type = "";
//list = new List<Data>();
prof_list = new List<Profiles>();
groups_list = new List<Groups>();
Profiles p_item = null;
Groups g_item = null;
#region FOR I ITems
for (int i = 0; i < response["response"]["profiles"].Count(); i++) {
p_item = new Profiles() {
p_firstname = response["response"]["profiles"][i]["first_name"].ToString(),
p_lastname = response["response"]["profiles"][i]["last_name"].ToString(),
p_profile_image = response["response"]["profiles"][i]["photo"].ToString(),
p_uid = (int)response["response"]["profiles"][i]["uid"]
};
//prof_list.Insert(p_item);
prof_list.Add(p_item);
}
for (int i = 0; i < response["response"]["groups"].Count(); i++) {
g_item = new Groups() {
g_name = response["response"]["groups"][i]["name"].ToString(),
g_photo = response["response"]["groups"][i]["photo"].ToString(),
g_uid = (int)response["response"]["groups"][i]["gid"]
};
groups_list.Add(g_item);
}
for (int i = 0; i < response["response"]["items"].Count(); i++) {
if (response["response"]["items"][i].ToString().Contains("attachment")) {
string type = response["response"]["items"][i]["attachment"]["type"].ToString();
if (type == "photo" || type == "posted_photo")
att_type = "photo";
else if (type == "audio")
att_type = "audio";
else if (type == "link")
att_type = "link";
else if (type == "note")
att_type = "note";
else if (type == "poll")
att_type = "poll";
else if (type == "graffiti")
att_type = "graffiti";
else if (type == "video")
att_type = "video";
else
Debug.WriteLine("Error news.xmal postdown", type);
} else
att_type = "post";
Data item = null;
var items = response["response"]["items"];
string to_autorname = "";
string to_auth = "";
if ((int)items[i]["source_id"] > 0) {
var x = from z in prof_list
where z.p_uid == (int)items[i]["source_id"]
select z;
to_autorname = x.FirstOrDefault().p_profile_image;
to_auth = x.FirstOrDefault().p_firstname + " " + x.FirstOrDefault().p_lastname;
} else {
var x = from z in groups_list
where z.g_uid == -(int)items[i]["source_id"]
select z;
to_autorname = x.FirstOrDefault().g_photo;
to_auth = x.FirstOrDefault().g_name;
}
#endregion
#region SWTICH
switch (att_type) {
case "photo":
item = new Data {
attachment_type = "photo",
image_src = items[i]["attachment"]["photo"]["src"].ToString(),
image_src_big = items[i]["attachment"]["photo"]["src_big"].ToString(),
text = items[i]["text"].ToString().Replace("<br>", "\n").Replace(""", "\""),
likes_count = (int)items[i]["likes"]["count"],
pid_photo = (int)items[i]["attachment"]["photo"]["pid"],
owner_id = (int)items[i]["attachment"]["photo"]["owner_id"],
isLikeMe = Convert.ToBoolean((int)items[i]["likes"]["user_likes"]),
uid = (int)items[i]["source_id"],
post_id = (int)items[i]["post_id"],
author_name = to_auth,
image_uri = to_autorname,
Date_Time = ((App)Application.Current).ConvertTimestamp(Convert.ToDouble((int)items[i]["date"])).ToString("dd MMM HH:mm:ss"),
comm_count = (int)items[i]["comments"]["count"],
};
list.Insert(0, item);
//list.Add( item);
break;
case "graffiti":
item = new Data {
attachment_type = "graffiti",
image_src = items[i]["attachment"]["graffiti"]["src"].ToString(),
image_src_big = items[i]["attachment"]["graffiti"]["src_big"].ToString(),
text = items[i]["text"].ToString().Replace("<br>", "\n").Replace(""", "\""),
likes_count = (int)items[i]["likes"]["count"],
pid_photo = (int)items[i]["attachment"]["graffiti"]["gid"],
owner_id = (int)items[i]["attachment"]["graffiti"]["owner_id"],
isLikeMe = Convert.ToBoolean((int)items[i]["likes"]["user_likes"]),
uid = (int)items[i]["source_id"],
post_id = (int)items[i]["post_id"],
author_name = to_auth,
image_uri = to_autorname,
Date_Time = ((App)Application.Current).ConvertTimestamp(Convert.ToDouble((int)items[i]["date"])).ToString("dd MMM HH:mm:ss"),
comm_count = (int)items[i]["comments"]["count"],
};
list.Insert(0, item);
// list.Add(item);
break;
case "audio":
item = new Data {
attachment_type = "audio",
audio_text = items[i]["attachment"]["audio"]["performer"].ToString() + " - " + items[i]["attachment"]["audio"]["title"].ToString(),
audioUri = "",
text = items[i]["text"].ToString().Replace("<br>", "\n").Replace(""", "\""),
likes_count = (int)items[i]["likes"]["count"],
audioid = (int)items[i]["attachment"]["audio"]["aid"],
isLikeMe = Convert.ToBoolean((int)items[i]["likes"]["user_likes"]),
uid = (int)items[i]["source_id"],
post_id = (int)items[i]["post_id"],
author_name = to_auth,
image_uri = to_autorname,
Date_Time = ((App)Application.Current).ConvertTimestamp(Convert.ToDouble((int)items[i]["date"])).ToString("dd MMM HH:mm:ss"),
comm_count = (int)items[i]["comments"]["count"],
};
list.Insert(0, item);
// list.Add(item);
break;
case "link":
item = new Data {
attachment_type = "link",
url = items[i]["attachment"]["link"]["url"].ToString(),
text = items[i]["text"].ToString().Replace("<br>", "\n").Replace(""", "\""),
title = items[i]["attachment"]["link"]["title"].ToString(),
likes_count = (int)items[i]["likes"]["count"],
isLikeMe = Convert.ToBoolean((int)items[i]["likes"]["user_likes"]),
uid = (int)items[i]["source_id"],
image_uri = to_autorname,
author_name = to_auth,
post_id = (int)items[i]["post_id"],
Date_Time = ((App)Application.Current).ConvertTimestamp(Convert.ToDouble((int)items[i]["date"])).ToString("dd MMM HH:mm:ss"),
comm_count = (int)items[i]["comments"]["count"],
};
list.Insert(0, item);
// list.Add(item);
break;
case "note":
item = new Data {
attachment_type = "note",
text = items[i]["text"].ToString().Replace("<br>", "\n").Replace(""", "\""),
title = items[i]["attachment"]["note"]["title"].ToString().Replace(""", "\""),
image_src = items[i]["attachment"]["link"]["image_src"].ToString(),
likes_count = (int)items[i]["likes"]["count"],
isLikeMe = Convert.ToBoolean((int)items[i]["likes"]["user_likes"]),
noteid = (int)items[i]["attachment"]["note"]["nid"],
owner_id = (int)items[i]["attachment"]["note"]["owner_id"],
uid = (int)items[i]["uid"],
image_uri = to_autorname,
author_name = to_auth,
post_id = (int)items[i]["post_id"],
Date_Time = ((App)Application.Current).ConvertTimestamp(Convert.ToDouble((int)items[i]["date"])).ToString("dd MMM HH:mm:ss"),
comm_count = (int)items[i]["comments"]["count"],
};
list.Insert(0, item);
// list.Add(item);
break;
case "post":
item = new Data {
attachment_type = "post",
text = items[i]["text"].ToString().Replace("<br>", "\n").Replace(""", "\""),
likes_count = (int)items[i]["likes"]["count"],
isLikeMe = Convert.ToBoolean((int)items[i]["likes"]["user_likes"]),
uid = (int)items[i]["source_id"],
image_uri = to_autorname,
author_name = to_auth,
post_id = (int)items[i]["post_id"],
Date_Time = ((App)Application.Current).ConvertTimestamp(Convert.ToDouble((int)items[i]["date"])).ToString("dd MMM HH:mm:ss"),
comm_count = (int)items[i]["comments"]["count"],
};
list.Insert(0, item);
// list.Add(item);
break;
case "poll":
item = new Data {
attachment_type = "poll",
text = items[i]["text"].ToString().Replace("<br>", "\n").Replace(""", "\""),
likes_count = (int)items[i]["likes"]["count"],
isLikeMe = Convert.ToBoolean((int)items[i]["likes"]["user_likes"]),
uid = (int)items[i]["source_id"],
image_uri = to_autorname,
author_name = to_auth,
poll_question = "Опрос: " + items[i]["attachment"]["poll"]["question"].ToString(),
poll_id = (int)items[i]["attachment"]["poll"]["poll_id"],
post_id = (int)items[i]["post_id"],
Date_Time = ((App)Application.Current).ConvertTimestamp(Convert.ToDouble((int)items[i]["date"])).ToString("dd MMM HH:mm:ss"),
comm_count = (int)items[i]["comments"]["count"],
};
list.Insert(0, item);
// list.Add(item);
break;
case "video":
item = new Data {
image_src = items[i]["attachment"]["video"]["image"].ToString(),
image_src_big = items[i]["attachment"]["video"]["image_big"].ToString(),
text = items[i]["text"].ToString().Replace("<br>", "\n").Replace(""", "\""),
likes_count = (int)items[i]["likes"]["count"],
pid_photo = (int)items[i]["attachment"]["video"]["vid"],
owner_id = (int)items[i]["attachment"]["video"]["owner_id"],
attachment_type = "photo",
isLikeMe = Convert.ToBoolean((int)items[i]["likes"]["user_likes"]),
uid = (int)items[i]["source_id"],
image_uri = to_autorname,
author_name = to_auth,
post_id = (int)items[i]["post_id"],
Date_Time = ((App)Application.Current).ConvertTimestamp(Convert.ToDouble((int)items[i]["date"])).ToString("dd MMM HH:mm:ss"),
comm_count = (int)items[i]["comments"]["count"],
};
list.Insert(0, item);
// list.Add(item);
break;
}
#endregion
}
//this.newslistBox.ItemsSource = null;
this.newslistBox.ItemsSource = list;
Debug.WriteLine("Itemsspurce updated");
} else {
ToastPrompt toast = new ToastPrompt();
//Debug.WriteLine(who.ToString());
// Debug.WriteLine(who.FirstOrDefault()[4].ToString());
toast.TextOrientation = System.Windows.Controls.Orientation.Vertical;
toast.Message = "Нету новых новостей";
toast.MillisecondsUntilHidden = 2000;
toast.Show();
}
ProgBar.IsIndeterminate = false;
ProgBar.Visibility = Visibility.Collapsed;
}...