首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

多线程有关问题,怎么关闭其他调用同一方法的其他线程

2012-02-11 
多线程问题,如何关闭其他调用同一方法的其他线程?说法可能有些问题,例如方法A()A()地执行时间为1分钟.点

多线程问题,如何关闭其他调用同一方法的其他线程?
说法可能有些问题,例如方法   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();
                                }
                        }
                }

[解决办法]
窗体中多线程可以使用控件自带的异步方法
例如
IAsyncResult iAsyncResult = form1.BeginInvoke() ; 开始
if(!iAsyncResult.IsCompeleted) 结束
{
EndInvoke(IAsyncResult );
}
[解决办法]
Mutex

用.NET 的里面提供的几个线程同步对象.可以解决你的问题.
[解决办法]
private stop = false;
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 ....

热点排行