我有一些线程正在运行,一旦检测到错误我想使用像messagebox一样的交互来继续执行或停止它。我不想在我的屏幕上显示多个msgbox,所以我添加了一个信号灯,让1个线程完成这项工作。但它不起作用。 所以我有以下情况:暂停消息框的线程
private void DO_WORK()
{
//some code missing
lock (_threadLock)
{
++activeWorkers;
}
ThreadPool.QueueUserWorkItem(o =>
{
WorkRequests(result);
lock (_threadLock)
{
--activeWorkers;
Monitor.Pulse(_threadLock);
}
});
lock (_threadLock)
{
if (STOP)
break;
while (activeWorkers > THREADS)
Monitor.Wait(_threadLock);
}
}
private void WorkRequests(string mystr)
{
string source = null;
string result = null;
bool processed = false;
bool messageBoxShown = false;
///////////////////////////////////
while(true)//this is for rechecking the bad ones
{
source = GetSource(mystr);
if (source == "ERROR_LIMITED")
{
lock (_threadLock)
{
if (!messageBoxShown)//<--- check messageBoxShown
{
if (MessageBox.Show("Blocked IP detected!\nPlease change it!", "test program", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) == DialogResult.OK)
{
messageBoxShown = true; //<--- set to true
}
else
DoStop();
}
}
}
else
break;
}
result = mystr + " - " + source;
////////////////////////////////////////
}
我怎样可以暂停所有的线程除了一个,它会显示在MessageBox和基于对话框继续执行或停止呢?
没有人??我问什么太复杂了? – ShaMora
你会得到一个一个的messageboxes对吗? –
是的,我想只有一个线程数量不多 – ShaMora