本文介绍了如何以确切的间隔重复线程? C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
private volatile bool _pause = false;
private ManualResetEvent _pauseEvent = new ManualResetEvent(true);
private Thread m_thread;
private bool _istoday = true;
private bool _isTimer_stop = false;
private bool _thread_start = true;
private void btn_start_Click(object sender, EventArgs e)
{
int timer_interval = (int)numeric_app_freequency.Value;
timer1_Tick(sender, e);
timer1.Interval = 60 * 1000 * timer_interval;
timer1.Enabled = true;
timer1.Start(); //
}
private void timer1_Tick(object sender, EventArgs e)
{
if (_thread_start == true)
{
_thread_start = false;
_istoday = true;
m_thread = new Thread(new ThreadStart(begin_thread));
m_thread.Name = "thred_1";
m_thread.IsBackground = true;
m_thread.Start();
}
}
private void begin_thread()
{
int pageNum = 1;
while (_pauseEvent.WaitOne())
{
if (_istoday == true)
{
parse_trs(pageNum);
pageNum++;
}
else
{
Textbox1.Text = "Work is done"; ;
break;
}
}
_autoEvent.Set();
}
private void parse_trs(int pageNum)
{
string str_pageNum = pageNum.ToString();
string list_url = "http://somedomain.com/bbs/board.php?bo_table=funny&page=" + str_pageNum;
WebClient client = new WebClient();
string sourceUrl = client.DownloadString(list_url);
HtmlAgilityPack.HtmlDocument mydoc = new HtmlAgilityPack.HtmlDocument();
mydoc.LoadHtml(sourceUrl);
HtmlNodeCollection tr_col = mydoc.DocumentNode.SelectNodes("/ html / body//div[@id="bo_list"]//table/tbody/tr");
foreach (HtmlNode node in tr_col)
{
_pauseEvent.WaitOne();
if (post_date == today_date)
{
Do work.......................................
}
else
{
_istoday = false;
break;
}
}
}
什么我试过了:
我用过while循环代替计时器而cpu重载所以应用程序freez
What I have tried:
I have used while loop instead of timer but cpu overloads so the application freez
推荐答案
这篇关于如何以确切的间隔重复线程? C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!