说法可能有些问题,例如方法 A();A()地执行时间为1分钟.
点下Button调用一次A(),再1分钟内点个十次八次的,就会出现在同一个时间同时有很多个线程在调用A()。我想只在最近的线程里执行A(),而取消其他线程的操作该如何做?在单线程里做,不停的点Button 一直死在那里,过一会儿才可以继续,
下面的代码是单线程里做Thread myThread; private void button1_Click(object sender, EventArgs e)
{
if (myThread != null)
{
if ((myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0)
{
myThread.Abort();
this.listBox1.Items.Add("Cancel one threassssssssssssssssssssssssssssssssssssssssssssssssssssss");
}
}
myThread = new Thread(new ThreadStart(DoSomething));
myThread.Start();
} private delegate void ItemAddHandle(int i);
private void DoSomething()
{
listBox1.BeginInvoke(new ItemAddHandle(ShowStartInfo), new object[] { 1 }); for (int i = 0; i < 10000; i++)
{
listBox1.BeginInvoke(new ItemAddHandle(DoItemAdd), new object[] { i});
}
}
private void DoItemAdd(int i)
{
this.listBox1.Items.Add(i.ToString());
}
private void ShowStartInfo(int i)
{
this.listBox1.Items.Add("new threaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (myThread != null)
{
if ((myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0)
{
myThread.Abort();
}
}
}
点下Button调用一次A(),再1分钟内点个十次八次的,就会出现在同一个时间同时有很多个线程在调用A()。我想只在最近的线程里执行A(),而取消其他线程的操作该如何做?在单线程里做,不停的点Button 一直死在那里,过一会儿才可以继续,
下面的代码是单线程里做Thread myThread; private void button1_Click(object sender, EventArgs e)
{
if (myThread != null)
{
if ((myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0)
{
myThread.Abort();
this.listBox1.Items.Add("Cancel one threassssssssssssssssssssssssssssssssssssssssssssssssssssss");
}
}
myThread = new Thread(new ThreadStart(DoSomething));
myThread.Start();
} private delegate void ItemAddHandle(int i);
private void DoSomething()
{
listBox1.BeginInvoke(new ItemAddHandle(ShowStartInfo), new object[] { 1 }); for (int i = 0; i < 10000; i++)
{
listBox1.BeginInvoke(new ItemAddHandle(DoItemAdd), new object[] { i});
}
}
private void DoItemAdd(int i)
{
this.listBox1.Items.Add(i.ToString());
}
private void ShowStartInfo(int i)
{
this.listBox1.Items.Add("new threaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (myThread != null)
{
if ((myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0)
{
myThread.Abort();
}
}
}
例如
IAsyncResult iAsyncResult = form1.BeginInvoke() ; 开始
if(!iAsyncResult.IsCompeleted) 结束
{
EndInvoke(IAsyncResult );
}
我想要的是如果启动第二个线程,则立刻结束第一个线程,开始第二个线程。
public void theadProc()
{
int i = 0;
while(!stop)
{
Threading.Thread.Sleep(10);
if(i>50000) break;
}
stop = true;
}
执行n次,就尝试先设置stop = false,然后等够一次循环,然后启动。
或者不要释放thread,
Thread xx = .....;
下一次就检查以下 if xx is isvalid ....