在线程中显示窗口卡死

时间:2023-01-01 18:37:49
功能是:主窗体上有一个按钮,点击之后在桌面的右下角显示一个提示窗口。

现在点击按钮的时候,另起了一个线程处理提示窗口的显示,在显示提示窗口和消失提示窗口之间用了Thread.sleep()函数来控制显示时间。

在显示的过程中,提示窗体是卡死状态,也就是鼠标移到窗体上的时候是显示等待的状态。但是不把显示提示窗体的功能放在线程中就不会出现这种情况,求教大家了。

19 个解决方案

#1


有没有用到Control.Invoke,有没有在这个委托中包含能让线程挂起的代码。

#2


你是不是在线程中是不是这样操作的:

            Form2 f = new Form2();
            f.Show();
            Thread.Sleep(5000);

这样的话,是会导致界面等待的,因为你让线程Sleep了,而且窗体的关闭是因为Thead执行完成,资源释放而关闭的,f.Show()执行完成后,窗体不会等待,而是直接执行Thread.Sleep,而如果是ShowDialog的话,那么线程就会挂起接受事件消息,只有关闭窗体以后,才会执行Thread.Sleep,这样就无法满足你定时关闭的功能了,必须手动关闭,所以,改变下思路吧,通过其他方式是实现或者Timer,当时间到了以后,手动关闭窗体

#3


引用 2 楼 wpfLove 的回复:
你是不是在线程中是不是这样操作的:

            Form2 f = new Form2();
            f.Show();
            Thread.Sleep(5000);

这样的话,是会导致界面等待的,因为你让线程Sleep了,而且窗体的关闭是因为Thead执行完成,资源释放而关闭的,f.Show()执行完成后,窗体不会等待,而是直接执行Thread.Sleep,而如果是ShowDialog的话,那么线程就会挂起接受事件消息,只有关闭窗体以后,才会执行Thread.Sleep,这样就无法满足你定时关闭的功能了,必须手动关闭,所以,改变下思路吧,通过其他方式是实现或者Timer,当时间到了以后,手动关闭窗体



 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

private void ShowWindow()

   Form m = new Form();
   m.Show()


//显示窗体的代码
private void Show()
{
ShowOn()
Thread.Sleep(3000);
ShowOff();
}



代码简化起来是这样的

#4


引用 1 楼 caozhy 的回复:
有没有用到Control.Invoke,有没有在这个委托中包含能让线程挂起的代码。


没有,,能给个示例代码看看不

#5


自己顶一下。。。。

#6


引用 3 楼 y1018799688 的回复:
Quote: 引用 2 楼 wpfLove 的回复:

你是不是在线程中是不是这样操作的:

            Form2 f = new Form2();
            f.Show();
            Thread.Sleep(5000);

这样的话,是会导致界面等待的,因为你让线程Sleep了,而且窗体的关闭是因为Thead执行完成,资源释放而关闭的,f.Show()执行完成后,窗体不会等待,而是直接执行Thread.Sleep,而如果是ShowDialog的话,那么线程就会挂起接受事件消息,只有关闭窗体以后,才会执行Thread.Sleep,这样就无法满足你定时关闭的功能了,必须手动关闭,所以,改变下思路吧,通过其他方式是实现或者Timer,当时间到了以后,手动关闭窗体



 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

private void ShowWindow()

   Form m = new Form();
   m.Show()


//显示窗体的代码
private void Show()
{
ShowOn()
Thread.Sleep(3000);
ShowOff();
}



代码简化起来是这样的

看你的代码,简化了以后跟上面那个差不多,也就是说,你在Show窗体以后,将线程Sleep了,导致你的界面无法响应

#7


引用 6 楼 wpfLove 的回复:
Quote: 引用 3 楼 y1018799688 的回复:

Quote: 引用 2 楼 wpfLove 的回复:

你是不是在线程中是不是这样操作的:

            Form2 f = new Form2();
            f.Show();
            Thread.Sleep(5000);

这样的话,是会导致界面等待的,因为你让线程Sleep了,而且窗体的关闭是因为Thead执行完成,资源释放而关闭的,f.Show()执行完成后,窗体不会等待,而是直接执行Thread.Sleep,而如果是ShowDialog的话,那么线程就会挂起接受事件消息,只有关闭窗体以后,才会执行Thread.Sleep,这样就无法满足你定时关闭的功能了,必须手动关闭,所以,改变下思路吧,通过其他方式是实现或者Timer,当时间到了以后,手动关闭窗体



 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

private void ShowWindow()

   Form m = new Form();
   m.Show()


//显示窗体的代码
private void Show()
{
ShowOn()
Thread.Sleep(3000);
ShowOff();
}



代码简化起来是这样的

看你的代码,简化了以后跟上面那个差不多,也就是说,你在Show窗体以后,将线程Sleep了,导致你的界面无法响应

但是如果
 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

这里直接调用ShowWindow,而不采用线程的情况下,是不会卡死的

#8


该回复于2014-01-11 11:30:00被版主删除

#9


引用 7 楼 y1018799688 的回复:
Quote: 引用 6 楼 wpfLove 的回复:

Quote: 引用 3 楼 y1018799688 的回复:

Quote: 引用 2 楼 wpfLove 的回复:

你是不是在线程中是不是这样操作的:

            Form2 f = new Form2();
            f.Show();
            Thread.Sleep(5000);

这样的话,是会导致界面等待的,因为你让线程Sleep了,而且窗体的关闭是因为Thead执行完成,资源释放而关闭的,f.Show()执行完成后,窗体不会等待,而是直接执行Thread.Sleep,而如果是ShowDialog的话,那么线程就会挂起接受事件消息,只有关闭窗体以后,才会执行Thread.Sleep,这样就无法满足你定时关闭的功能了,必须手动关闭,所以,改变下思路吧,通过其他方式是实现或者Timer,当时间到了以后,手动关闭窗体



 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

private void ShowWindow()

   Form m = new Form();
   m.Show()


//显示窗体的代码
private void Show()
{
ShowOn()
Thread.Sleep(3000);
ShowOff();
}



代码简化起来是这样的

看你的代码,简化了以后跟上面那个差不多,也就是说,你在Show窗体以后,将线程Sleep了,导致你的界面无法响应

但是如果
 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

这里直接调用ShowWindow,而不采用线程的情况下,是不会卡死的

把你的函数Show改个函数名吧,跟Form自己的Show冲突了~

#10


引用 9 楼 wpfLove 的回复:
Quote: 引用 7 楼 y1018799688 的回复:

Quote: 引用 6 楼 wpfLove 的回复:

Quote: 引用 3 楼 y1018799688 的回复:

Quote: 引用 2 楼 wpfLove 的回复:

你是不是在线程中是不是这样操作的:

            Form2 f = new Form2();
            f.Show();
            Thread.Sleep(5000);

这样的话,是会导致界面等待的,因为你让线程Sleep了,而且窗体的关闭是因为Thead执行完成,资源释放而关闭的,f.Show()执行完成后,窗体不会等待,而是直接执行Thread.Sleep,而如果是ShowDialog的话,那么线程就会挂起接受事件消息,只有关闭窗体以后,才会执行Thread.Sleep,这样就无法满足你定时关闭的功能了,必须手动关闭,所以,改变下思路吧,通过其他方式是实现或者Timer,当时间到了以后,手动关闭窗体



 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

private void ShowWindow()

   Form m = new Form();
   m.Show()


//显示窗体的代码
private void Show()
{
ShowOn()
Thread.Sleep(3000);
ShowOff();
}



代码简化起来是这样的

看你的代码,简化了以后跟上面那个差不多,也就是说,你在Show窗体以后,将线程Sleep了,导致你的界面无法响应

但是如果
 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

这里直接调用ShowWindow,而不采用线程的情况下,是不会卡死的

把你的函数Show改个函数名吧,跟Form自己的Show冲突了~


没用。。。 在线程中显示窗口卡死

#11


不知道你的代码要干嘛。
想控制显示一段时间然后关闭,要用timer。如果用线程,那就不要在线程里show窗口,而是ui显示窗口后开启线程,线程sleep()之后,通过委托或者事件通知ui关闭窗口。

#12


引用 11 楼 yuwenge 的回复:
不知道你的代码要干嘛。
想控制显示一段时间然后关闭,要用timer。如果用线程,那就不要在线程里show窗口,而是ui显示窗口后开启线程,线程sleep()之后,通过委托或者事件通知ui关闭窗口。


提示窗体的功能是为了展示从服务端发来的信息,这里面是用socket和服务端通信的,所以放在线程里面,线程里面监听服务端发来的信息,有信息的话就在右下角展示出来。窗体的显示在线程里面就有卡死的现象

#13


你在要显示的Form m = new Form();窗口中新开一个计时器,1秒钟看一下,到了5秒自动关闭就行了
放在主线程中也可以

#14


引用 13 楼 dongxinxi 的回复:
你在要显示的Form m = new Form();窗口中新开一个计时器,1秒钟看一下,到了5秒自动关闭就行了
放在主线程中也可以


这个线程要一直保持连接接收服务端发来的消息的,在线程里面试过计时器,没用。

#15


LZ的整个流程设计修改下吧,有点混乱,
把UI控制和数据监听分开处理吧,数据监听放在新线程里面,而其他UI相关逻辑,由主线程控制吧

#16


引用 楼主 y1018799688 的回复:
功能是:主窗体上有一个按钮,点击之后在桌面的右下角显示一个提示窗口。

现在点击按钮的时候,另起了一个线程处理提示窗口的显示,在显示提示窗口和消失提示窗口之间用了Thread.sleep()函数来控制显示时间。

在显示的过程中,提示窗体是卡死状态,也就是鼠标移到窗体上的时候是显示等待的状态。但是不把显示提示窗体的功能放在线程中就不会出现这种情况,求教大家了。


楼主有么有知道解决的方法

#17


引用 12 楼 y1018799688 的回复:
Quote: 引用 11 楼 yuwenge 的回复:

不知道你的代码要干嘛。
想控制显示一段时间然后关闭,要用timer。如果用线程,那就不要在线程里show窗口,而是ui显示窗口后开启线程,线程sleep()之后,通过委托或者事件通知ui关闭窗口。


提示窗体的功能是为了展示从服务端发来的信息,这里面是用socket和服务端通信的,所以放在线程里面,线程里面监听服务端发来的信息,有信息的话就在右下角展示出来。窗体的显示在线程里面就有卡死的现象

在你自己弹出的form里放个timer到时间关自己就行了。这功能和线程一毛钱关系都没有。

#18


引用 17 楼 yuwenge 的回复:
Quote: 引用 12 楼 y1018799688 的回复:

Quote: 引用 11 楼 yuwenge 的回复:

不知道你的代码要干嘛。
想控制显示一段时间然后关闭,要用timer。如果用线程,那就不要在线程里show窗口,而是ui显示窗口后开启线程,线程sleep()之后,通过委托或者事件通知ui关闭窗口。


提示窗体的功能是为了展示从服务端发来的信息,这里面是用socket和服务端通信的,所以放在线程里面,线程里面监听服务端发来的信息,有信息的话就在右下角展示出来。窗体的显示在线程里面就有卡死的现象

在你自己弹出的form里放个timer到时间关自己就行了。这功能和线程一毛钱关系都没有。


试过timer,时间到了不会执行设置好的事件函数,不把显示form的代码放在线程里面,timer就可以有效

#19


引用 18 楼 y1018799688 的回复:
Quote: 引用 17 楼 yuwenge 的回复:

Quote: 引用 12 楼 y1018799688 的回复:

Quote: 引用 11 楼 yuwenge 的回复:

不知道你的代码要干嘛。
想控制显示一段时间然后关闭,要用timer。如果用线程,那就不要在线程里show窗口,而是ui显示窗口后开启线程,线程sleep()之后,通过委托或者事件通知ui关闭窗口。


提示窗体的功能是为了展示从服务端发来的信息,这里面是用socket和服务端通信的,所以放在线程里面,线程里面监听服务端发来的信息,有信息的话就在右下角展示出来。窗体的显示在线程里面就有卡死的现象

在你自己弹出的form里放个timer到时间关自己就行了。这功能和线程一毛钱关系都没有。


试过timer,时间到了不会执行设置好的事件函数,不把显示form的代码放在线程里面,timer就可以有效

你试试用 System.Timers.Timer

#1


有没有用到Control.Invoke,有没有在这个委托中包含能让线程挂起的代码。

#2


你是不是在线程中是不是这样操作的:

            Form2 f = new Form2();
            f.Show();
            Thread.Sleep(5000);

这样的话,是会导致界面等待的,因为你让线程Sleep了,而且窗体的关闭是因为Thead执行完成,资源释放而关闭的,f.Show()执行完成后,窗体不会等待,而是直接执行Thread.Sleep,而如果是ShowDialog的话,那么线程就会挂起接受事件消息,只有关闭窗体以后,才会执行Thread.Sleep,这样就无法满足你定时关闭的功能了,必须手动关闭,所以,改变下思路吧,通过其他方式是实现或者Timer,当时间到了以后,手动关闭窗体

#3


引用 2 楼 wpfLove 的回复:
你是不是在线程中是不是这样操作的:

            Form2 f = new Form2();
            f.Show();
            Thread.Sleep(5000);

这样的话,是会导致界面等待的,因为你让线程Sleep了,而且窗体的关闭是因为Thead执行完成,资源释放而关闭的,f.Show()执行完成后,窗体不会等待,而是直接执行Thread.Sleep,而如果是ShowDialog的话,那么线程就会挂起接受事件消息,只有关闭窗体以后,才会执行Thread.Sleep,这样就无法满足你定时关闭的功能了,必须手动关闭,所以,改变下思路吧,通过其他方式是实现或者Timer,当时间到了以后,手动关闭窗体



 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

private void ShowWindow()

   Form m = new Form();
   m.Show()


//显示窗体的代码
private void Show()
{
ShowOn()
Thread.Sleep(3000);
ShowOff();
}



代码简化起来是这样的

#4


引用 1 楼 caozhy 的回复:
有没有用到Control.Invoke,有没有在这个委托中包含能让线程挂起的代码。


没有,,能给个示例代码看看不

#5


自己顶一下。。。。

#6


引用 3 楼 y1018799688 的回复:
Quote: 引用 2 楼 wpfLove 的回复:

你是不是在线程中是不是这样操作的:

            Form2 f = new Form2();
            f.Show();
            Thread.Sleep(5000);

这样的话,是会导致界面等待的,因为你让线程Sleep了,而且窗体的关闭是因为Thead执行完成,资源释放而关闭的,f.Show()执行完成后,窗体不会等待,而是直接执行Thread.Sleep,而如果是ShowDialog的话,那么线程就会挂起接受事件消息,只有关闭窗体以后,才会执行Thread.Sleep,这样就无法满足你定时关闭的功能了,必须手动关闭,所以,改变下思路吧,通过其他方式是实现或者Timer,当时间到了以后,手动关闭窗体



 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

private void ShowWindow()

   Form m = new Form();
   m.Show()


//显示窗体的代码
private void Show()
{
ShowOn()
Thread.Sleep(3000);
ShowOff();
}



代码简化起来是这样的

看你的代码,简化了以后跟上面那个差不多,也就是说,你在Show窗体以后,将线程Sleep了,导致你的界面无法响应

#7


引用 6 楼 wpfLove 的回复:
Quote: 引用 3 楼 y1018799688 的回复:

Quote: 引用 2 楼 wpfLove 的回复:

你是不是在线程中是不是这样操作的:

            Form2 f = new Form2();
            f.Show();
            Thread.Sleep(5000);

这样的话,是会导致界面等待的,因为你让线程Sleep了,而且窗体的关闭是因为Thead执行完成,资源释放而关闭的,f.Show()执行完成后,窗体不会等待,而是直接执行Thread.Sleep,而如果是ShowDialog的话,那么线程就会挂起接受事件消息,只有关闭窗体以后,才会执行Thread.Sleep,这样就无法满足你定时关闭的功能了,必须手动关闭,所以,改变下思路吧,通过其他方式是实现或者Timer,当时间到了以后,手动关闭窗体



 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

private void ShowWindow()

   Form m = new Form();
   m.Show()


//显示窗体的代码
private void Show()
{
ShowOn()
Thread.Sleep(3000);
ShowOff();
}



代码简化起来是这样的

看你的代码,简化了以后跟上面那个差不多,也就是说,你在Show窗体以后,将线程Sleep了,导致你的界面无法响应

但是如果
 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

这里直接调用ShowWindow,而不采用线程的情况下,是不会卡死的

#8


该回复于2014-01-11 11:30:00被版主删除

#9


引用 7 楼 y1018799688 的回复:
Quote: 引用 6 楼 wpfLove 的回复:

Quote: 引用 3 楼 y1018799688 的回复:

Quote: 引用 2 楼 wpfLove 的回复:

你是不是在线程中是不是这样操作的:

            Form2 f = new Form2();
            f.Show();
            Thread.Sleep(5000);

这样的话,是会导致界面等待的,因为你让线程Sleep了,而且窗体的关闭是因为Thead执行完成,资源释放而关闭的,f.Show()执行完成后,窗体不会等待,而是直接执行Thread.Sleep,而如果是ShowDialog的话,那么线程就会挂起接受事件消息,只有关闭窗体以后,才会执行Thread.Sleep,这样就无法满足你定时关闭的功能了,必须手动关闭,所以,改变下思路吧,通过其他方式是实现或者Timer,当时间到了以后,手动关闭窗体



 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

private void ShowWindow()

   Form m = new Form();
   m.Show()


//显示窗体的代码
private void Show()
{
ShowOn()
Thread.Sleep(3000);
ShowOff();
}



代码简化起来是这样的

看你的代码,简化了以后跟上面那个差不多,也就是说,你在Show窗体以后,将线程Sleep了,导致你的界面无法响应

但是如果
 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

这里直接调用ShowWindow,而不采用线程的情况下,是不会卡死的

把你的函数Show改个函数名吧,跟Form自己的Show冲突了~

#10


引用 9 楼 wpfLove 的回复:
Quote: 引用 7 楼 y1018799688 的回复:

Quote: 引用 6 楼 wpfLove 的回复:

Quote: 引用 3 楼 y1018799688 的回复:

Quote: 引用 2 楼 wpfLove 的回复:

你是不是在线程中是不是这样操作的:

            Form2 f = new Form2();
            f.Show();
            Thread.Sleep(5000);

这样的话,是会导致界面等待的,因为你让线程Sleep了,而且窗体的关闭是因为Thead执行完成,资源释放而关闭的,f.Show()执行完成后,窗体不会等待,而是直接执行Thread.Sleep,而如果是ShowDialog的话,那么线程就会挂起接受事件消息,只有关闭窗体以后,才会执行Thread.Sleep,这样就无法满足你定时关闭的功能了,必须手动关闭,所以,改变下思路吧,通过其他方式是实现或者Timer,当时间到了以后,手动关闭窗体



 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

private void ShowWindow()

   Form m = new Form();
   m.Show()


//显示窗体的代码
private void Show()
{
ShowOn()
Thread.Sleep(3000);
ShowOff();
}



代码简化起来是这样的

看你的代码,简化了以后跟上面那个差不多,也就是说,你在Show窗体以后,将线程Sleep了,导致你的界面无法响应

但是如果
 Func f = new Func(ShowWindow);
            Thread thread = new Thread(new ThreadStart(f));
            thread.IsBackground = true ;
            thread.Start();

这里直接调用ShowWindow,而不采用线程的情况下,是不会卡死的

把你的函数Show改个函数名吧,跟Form自己的Show冲突了~


没用。。。 在线程中显示窗口卡死

#11


不知道你的代码要干嘛。
想控制显示一段时间然后关闭,要用timer。如果用线程,那就不要在线程里show窗口,而是ui显示窗口后开启线程,线程sleep()之后,通过委托或者事件通知ui关闭窗口。

#12


引用 11 楼 yuwenge 的回复:
不知道你的代码要干嘛。
想控制显示一段时间然后关闭,要用timer。如果用线程,那就不要在线程里show窗口,而是ui显示窗口后开启线程,线程sleep()之后,通过委托或者事件通知ui关闭窗口。


提示窗体的功能是为了展示从服务端发来的信息,这里面是用socket和服务端通信的,所以放在线程里面,线程里面监听服务端发来的信息,有信息的话就在右下角展示出来。窗体的显示在线程里面就有卡死的现象

#13


你在要显示的Form m = new Form();窗口中新开一个计时器,1秒钟看一下,到了5秒自动关闭就行了
放在主线程中也可以

#14


引用 13 楼 dongxinxi 的回复:
你在要显示的Form m = new Form();窗口中新开一个计时器,1秒钟看一下,到了5秒自动关闭就行了
放在主线程中也可以


这个线程要一直保持连接接收服务端发来的消息的,在线程里面试过计时器,没用。

#15


LZ的整个流程设计修改下吧,有点混乱,
把UI控制和数据监听分开处理吧,数据监听放在新线程里面,而其他UI相关逻辑,由主线程控制吧

#16


引用 楼主 y1018799688 的回复:
功能是:主窗体上有一个按钮,点击之后在桌面的右下角显示一个提示窗口。

现在点击按钮的时候,另起了一个线程处理提示窗口的显示,在显示提示窗口和消失提示窗口之间用了Thread.sleep()函数来控制显示时间。

在显示的过程中,提示窗体是卡死状态,也就是鼠标移到窗体上的时候是显示等待的状态。但是不把显示提示窗体的功能放在线程中就不会出现这种情况,求教大家了。


楼主有么有知道解决的方法

#17


引用 12 楼 y1018799688 的回复:
Quote: 引用 11 楼 yuwenge 的回复:

不知道你的代码要干嘛。
想控制显示一段时间然后关闭,要用timer。如果用线程,那就不要在线程里show窗口,而是ui显示窗口后开启线程,线程sleep()之后,通过委托或者事件通知ui关闭窗口。


提示窗体的功能是为了展示从服务端发来的信息,这里面是用socket和服务端通信的,所以放在线程里面,线程里面监听服务端发来的信息,有信息的话就在右下角展示出来。窗体的显示在线程里面就有卡死的现象

在你自己弹出的form里放个timer到时间关自己就行了。这功能和线程一毛钱关系都没有。

#18


引用 17 楼 yuwenge 的回复:
Quote: 引用 12 楼 y1018799688 的回复:

Quote: 引用 11 楼 yuwenge 的回复:

不知道你的代码要干嘛。
想控制显示一段时间然后关闭,要用timer。如果用线程,那就不要在线程里show窗口,而是ui显示窗口后开启线程,线程sleep()之后,通过委托或者事件通知ui关闭窗口。


提示窗体的功能是为了展示从服务端发来的信息,这里面是用socket和服务端通信的,所以放在线程里面,线程里面监听服务端发来的信息,有信息的话就在右下角展示出来。窗体的显示在线程里面就有卡死的现象

在你自己弹出的form里放个timer到时间关自己就行了。这功能和线程一毛钱关系都没有。


试过timer,时间到了不会执行设置好的事件函数,不把显示form的代码放在线程里面,timer就可以有效

#19


引用 18 楼 y1018799688 的回复:
Quote: 引用 17 楼 yuwenge 的回复:

Quote: 引用 12 楼 y1018799688 的回复:

Quote: 引用 11 楼 yuwenge 的回复:

不知道你的代码要干嘛。
想控制显示一段时间然后关闭,要用timer。如果用线程,那就不要在线程里show窗口,而是ui显示窗口后开启线程,线程sleep()之后,通过委托或者事件通知ui关闭窗口。


提示窗体的功能是为了展示从服务端发来的信息,这里面是用socket和服务端通信的,所以放在线程里面,线程里面监听服务端发来的信息,有信息的话就在右下角展示出来。窗体的显示在线程里面就有卡死的现象

在你自己弹出的form里放个timer到时间关自己就行了。这功能和线程一毛钱关系都没有。


试过timer,时间到了不会执行设置好的事件函数,不把显示form的代码放在线程里面,timer就可以有效

你试试用 System.Timers.Timer

#20