线程释放内存的小问题,高手帮忙。。。

parcool 2010-05-01 02:08:39
winform的。

private void Reminder_Load(object sender, EventArgs e)//FormLoad事件
{
Control.CheckForIllegalCrossThreadCalls = false;//是否检查跨线程调用windows控件不安全?属性为 不检查
th = new Thread(new ThreadStart(getDateTime));
th.IsBackground = false;
th.Start();
}


public void getDateTime()//获取当前时间
{
while (true)
{
lblDateTime.Text = DateTime.Now.ToString();

Thread.Sleep(50);
}

}

------------------------------有问题---------------------------
1、运行过后,内存一直在增加。。。
2、谁给我讲下,abort(),join(),sleep()...等等?对于线程不太了解。请讲通俗点哦,网上的写得很繁琐。
...全文
267 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 parcool 的回复:]
timer的interval属性为:250

打开任务管理器,会看到内存在每2秒8KB增加。
老师一直告诉我要慎用 timer控件。。。

各位大哥帮下忙?我只是简单的想label不断的显示系统当前时间而已,我容易吗我....[/Quote]
老师告诉你怎样算是慎用了吗?难道他是巫师,只管吓唬人?

如果所谓“慎用”的结果就是造成你把在线程中写getDateTime那样的循环,那么老师真是害人精啊,怎么这个就不“慎用”了吗?!
myhotmail123 2010-05-02
  • 打赏
  • 举报
回复
如果你硬件好,你就用GC收一下
jinleisnake 2010-05-02
  • 打赏
  • 举报
回复
刚开始的时候增加一下,后面就不会了,1楼的代码也是一样的
parcool 2010-05-01
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication9
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = DateTime.Now.ToString();
}

}
}




timer的interval属性为:250

打开任务管理器,会看到内存在每2秒8KB增加。
老师一直告诉我要慎用 timer控件。。。

各位大哥帮下忙?我只是简单的想label不断的显示系统当前时间而已,我容易吗我....
parcool 2010-05-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jinleisnake 的回复:]
1、我试了一下,不会一直增加...
[/Quote]

------------------------------------------------------------------------------
我错了~原来...
请叫我卷福 2010-05-01
  • 打赏
  • 举报
回复
线程分前台线程 和后台线程,只有所有的前台线程都结束后(不管后台线程结束没),系统就会完全结束进程
Thread默认是前台线程,把th.IsBackground = false;就变成后台线程了
按LZ的说法,莫非th线程一直没结束?
那用Timer timer=new Timer(……)吧!它不会新建立线程的
zhehan54 2010-05-01
  • 打赏
  • 举报
回复
你把 th.IsBackground = false;
拿掉看看
jinleisnake 2010-05-01
  • 打赏
  • 举报
回复
1、我试了一下,不会一直增加...
neohope 2010-05-01
  • 打赏
  • 举报
回复
Reminder_Load调用了很多次吗?
另外你为什么不用timer呢?
parcool 2010-05-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaowang1026 的回复:]
Abort()直接终止了 join是等待被锁定的对象被解锁后在进行,sleep让程序休眠了(暂时停止)
[/Quote]


-------------第一个问题呢----------------
xiaowang1026 2010-05-01
  • 打赏
  • 举报
回复
Abort()直接终止了 join是等待被锁定的对象被解锁后在进行,sleep让程序休眠了(暂时停止)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧