多线程 (疑问)

hetengfei_ 2011-12-31 04:13:17
不知为什么,程序出错了,求救!
以下程序用到了 几个控件,
// 1 richTextBox rtbShow;//用来显示信息的 
// 2 btn123Start //是开始线程 button。
// 2 btnSleep//当前线程 Sleep button。
// 2 btnSuspendResume//挂起 or 继续 button。
// 2 btnAbort //中止 线程 button。
// 3 新建一个名为 form2 的窗体

//

//线程的 启动,挂起,休眠,终止
private static Thread NewThread; //线程变量
public static Form2 from2;
private void btn123Start_Click(object sender, EventArgs e)
{ //启动线程
from2 = new Form2(); //声明一个窗体
from2.Show();
// 线程实例化,并设置优先级
NewThread = new Thread(new ThreadStart(from2.ShowProgress));
NewThread.Priority = ThreadPriority.Normal;//优先权 正常
NewThread.Start();
//NewThread.Join(1000);
}
//当前线程 Sleep 5秒
private void btnSleep_Click(object sender, EventArgs e)
{
Thread.Sleep(5*1000);

}

private void btnSuspendResume_Click(object sender, EventArgs e)
{
if (NewThread.ThreadState == System.Threading.ThreadState.Running)// 此时正在运行中
{
NewThread.Suspend();//吊起// 为什么 这里出错
rtbShow.Text = "二线程状态:挂起";
}
if (NewThread.ThreadState == System.Threading.ThreadState.Suspended)// 此时 挂起
{
NewThread.Resume();//运行 // 为什么 这里出错
rtbShow.Text = "二线程状态:运行";
}
}

private void btnAbort_Click(object sender, EventArgs e)
{
if (NewThread.IsAlive)
{
NewThread.Abort();//中止任务 // 为什么 这里出错
from2.Hide();
from2.Dispose();
from2 = null;
NewThread = null;
}
}
...全文
99 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
机器人 2011-12-31
  • 打赏
  • 举报
回复
关于 Thread 问题,看看这个链接吧。

http://www.albahari.com/threading/

Thread 暂停,继续的帖子也很多,再搜搜
hetengfei_ 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 stonespace 的回复:]
问题可能出在from2.ShowProgress方法,
[/Quote]
我把 form2 贴出来,
麻凡 帮看看!
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private int value;
public int Value {
get { return value; }
set { value = Value; }
}
private void Form2_Load(object sender, EventArgs e)
{
value = 50;
}
public void ShowProgress()
{

progressBar1.Value = value;

}
private Timer tim;
private void btnInVal_Click(object sender, EventArgs e)
{
progressBar1.Value = 0;
if (tim == null)
{
tim = new Timer();
tim.Interval = 50;
tim.Tick += new EventHandler(timTick);
}
tim.Start();
}
private void timTick(object sender, EventArgs e)
{
if (progressBar1.Value < 100)
{
progressBar1.Value++;
}
else
{
progressBar1.Value = 0;
tim.Stop();
}
}
}
stonespace 2011-12-31
  • 打赏
  • 举报
回复
问题可能出在from2.ShowProgress方法,
hetengfei_ 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fangxinggood 的回复:]
NewThread.Suspend(), Resume() 的方法早就废弃了。
另外,直接去看看 Task 把,用线程池的线程比你自己直接Thread要好

[/Quote]
请问:
.net 是不是不支持 Suspend(), Resume()了?
为什么,上面的没有返应?
你说线程池,与我 new Thread() 方法开劈的线程,有何不同?
机器人 2011-12-31
  • 打赏
  • 举报
回复
NewThread.Suspend(), Resume() 的方法早就废弃了。

另外,直接去看看 Task 把,用线程池的线程比你自己直接Thread要好

110,539

社区成员

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

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

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