Потоки и парсинг данных - C#
Формулировка задачи:
Не знаю как правильно описать,но попробую своими словами.
Вообщем в потоке через Json парсим twitch и если есть поле
display_name
,выдает в BalloonTipText сообщение о том,что пользователь начал трансляцию. Поток работает до тех пор,пока не найдетdisplay_name
и не выдаст сообщение в подсказку. Дальше надо парсить эту же страницу и ждать пока появиться полеstream\":null
,после чего вернуться к начальному действию с парсингомdisplay_name
. По простому: 1.Спарсить твич 1.Найти полеdisplay_name
2.Выдать инфу в BalloonTipText 3.Ожидать пока не найдется поле B]stream\":null[/B] 4.Вернутся к 1 пункту.
public partial class SettingsForm : Form
{
Thread twitchStreamThread;
string Username = "testProfile";
public SettingsForm()
{
InitializeComponent();
//Set up the icon image
twitchIcon = new Icon("notice.ico");
//Оповещение и иконка
twitchTray = new NotifyIcon();
twitchTray.Icon = twitchIcon;
twitchTray.Visible = true;
//Сворачиваем форму и прячем в панели задач
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
// Запуск потока
twitchStreamThread = new Thread(new ThreadStart(TwitchStreamLiveThread));
twitchStreamThread.Start();
}
private void notice_ClickLinked(Object sender, EventArgs e)
{
System.Diagnostics.Process.Start("http://www.twitch.tv/testProfile");
}
private void TwitchStreamLiveThread()
{
try
{
while (true)
{
string sUrl = "https://api.twitch.tv/kraken/streams/" + Username;
HttpWebRequest wRequest = (HttpWebRequest)HttpWebRequest.Create(sUrl);
wRequest.ContentType = "application/json";
wRequest.Accept = "application/vnd.twitchtv.v3+json";
wRequest.Method = "GET";
dynamic wResponse = wRequest.GetResponse().GetResponseStream();
StreamReader reader = new StreamReader(wResponse);
dynamic res = reader.ReadToEnd();
reader.Close();
wResponse.Close();
if (res.Contains("display_name"))
{
twitchTray.BalloonTipTitle = Username + " начал(а) трансляцию!";
twitchTray.BalloonTipText = "(Нажмите для просмотра трансляции)";
twitchTray.ShowBalloonTip(10000);
twitchTray.BalloonTipClicked += notice_ClickLinked;
}
Thread.Sleep(5000);
}
}
catch (ThreadAbortException tbe)
{
}
// Что дальше делать?
}
}
нашел временное решение,созданием ещё одного потока с поиском второй строки и по очередной паузы потоков...
но это не то,что я хотел.Сделал конечно,но через одно место...
Решение задачи: «Потоки и парсинг данных»
textual
Листинг программы
while (true) {Thread.Sleep(5000);}