当满足条件时IsXXX()返回true,否则返回false。前提:总会到达满足条件的时候,但是时间不确定。如果没有满足条件,则一直等待下去,不执行另外的语句,但是界面要能够响应操作,否则这个监听就无法控制了。在while中用Thread.Sleep会造成界面假死;在while中不用Thread.Sleep而用 Application.DoEvents()则会导致CPU占用率接近50%。如果在while中同时用Thread.Sleep(50)和Application.DoEvents(),那么表面上看不假死了,致CPU占用率也降下来了,但是事实上UI线程还是阻塞了的,界面不好使,有时点按钮没反应。
所以想避免用while,如果用多线程的话,会不会在IsDoNext()还没返回的情况下,主线程就执行接下来的操作了? private bool m_isLisening = true;
private void button1_Click(object sender, EventArgs e)
{
if (IsDoNext() == true)
{ //执行语句块A
}
else
{ //执行语句块B
}
} private void button2_Click(object sender, EventArgs e)
{
//切换监听状态
if (m_isLisening == true)
{
m_isLisening = false;
}
else
{
m_isLisening = true;
}
} private bool IsDoNext()
{
while (IsOK() == false && m_isLisening == true)
{
Thread.Sleep(3000);
}
return true;
} private bool IsOK()
{
if (满足条件)
{
return true;
}
else
{
return false;
}
}
所以想避免用while,如果用多线程的话,会不会在IsDoNext()还没返回的情况下,主线程就执行接下来的操作了? private bool m_isLisening = true;
private void button1_Click(object sender, EventArgs e)
{
if (IsDoNext() == true)
{ //执行语句块A
}
else
{ //执行语句块B
}
} private void button2_Click(object sender, EventArgs e)
{
//切换监听状态
if (m_isLisening == true)
{
m_isLisening = false;
}
else
{
m_isLisening = true;
}
} private bool IsDoNext()
{
while (IsOK() == false && m_isLisening == true)
{
Thread.Sleep(3000);
}
return true;
} private bool IsOK()
{
if (满足条件)
{
return true;
}
else
{
return false;
}
}
如果用多线程的话,会不会在IsDoNext()还没返回的情况下,主线程就执行接下来的操作了?
谢谢先了~
会的,一定会的,这才叫多线程,你可以设置一个信号量,当线程执行完的时候,重置这个信号量,这样在isdonext()那里就等待这个信号量就行了,当信号量有信号了,就证明线程执行完了,你就可以继续下面的工作了,