c#中sleep()并不能让子线程休息

一个关于c#的问题:子线程在主线程中,子线程在循环,有些地方要休息一下再操作,比如写串口操作等,但是子线程中的sleep()方法并不能让子线程休息。请问应该如何解决部分代... 一个关于c#的问题:子线程在主线程中,子线程在循环,有些地方要休息一下再操作,比如写串口操作等,但是子线程中的sleep()方法并不能让子线程休息。请问应该如何解决
部分代码:
private ThreadStart threadstart;
public Thread newThread;
public void StartWork(){}
按钮中的事件
threadstart = new ThreadStart(StartWork);
newThread = new Thread(threadstart);
newThread.Start();
this.Test_thing();

public void Test_thing(){...Thread.Sleep(8000);...}
休息的是threadstart进程
展开
 我来答
rail_fish
推荐于2017-10-04 · TA获得超过369个赞
知道小有建树答主
回答量:132
采纳率:0%
帮助的人:0
展开全部
你需要指定时间的,单位为毫秒
而且注意写的地方,在哪个线程中写就是哪个线程休息

补充:
不太明白你什么意思,你的代码是:
threadstart = new ThreadStart(StartWork); // 创建一个StartWork方法的委托
newThread = new Thread(threadstart); // 创建一个使用委托的线程
newThread.Start(); // 线程开始执行
this.Test_thing(); 调用了this_thing()函数,因为this_thing是在主进程中执行的,所以挂起的是主进程而不是StartWork

这样才对,你却说他挂起了threadstart进程,这是什么意思?若你想要StartWork挂起,Thread.Sleep(8000)写在StartWork里,在哪个线程中运行这个方法,就是挂起哪个线程
zhangbo99_net
2010-01-23 · TA获得超过1465个赞
知道大有可为答主
回答量:922
采纳率:0%
帮助的人:1231万
展开全部
你好!
由于看不到你的代码,所以看不出问题所在.
可以给你一个参考的示例:

C#线程暂停与开启
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Threading;

namespace AutoResetEventTest
{
public partial class Form1 : Form
{
private ManualResetEvent manualResetEvent;
private AutoResetEvent auto;
private bool suspend;
private AsyncOperation asyncOperation;

public delegate void InvokeDelegate(string str);

private InvokeDelegate invokeDelegate;
const string str = "Test";
private bool formClosed;

public Form1()
{
InitializeComponent();
manualResetEvent = new ManualResetEvent(false);
auto = new AutoResetEvent(true);
asyncOperation = AsyncOperationManager.CreateOperation(null);
invokeDelegate = new InvokeDelegate(this.SafeInvoke);
this.FormClosed += delegate
{
this.formClosed = true;
this.auto.Close();
};
}

private void btnStart_Click(object sender, EventArgs e)
{
this.btnStart.Enabled = false;
this.btnSuspend.Enabled = true;
ThreadPool.QueueUserWorkItem(delegate
{
SafeInvoke();

//this.BeginInvoke(invokeDelegate, new object[] { str });
});
}

private void btnSuspend_Click(object sender, EventArgs e)
{
this.btnSuspend.Enabled = false;
this.btnResume.Enabled = true;
this.suspend = true;
manualResetEvent.Reset();
}

private void SafeInvoke(string s)
{
while (true)
{
if (formClosed)
return;

Thread.Sleep(200);

if (suspend)
this.auto.WaitOne();
this.txtMessageBox.AppendText(s);
}
}

private void SafeInvoke()
{
while (true)
{
if (formClosed)
return;

Thread.Sleep(200);

if (suspend)
//this.auto.WaitOne();
manualResetEvent.WaitOne();

asyncOperation.Post(delegate
{
this.txtMessageBox.AppendText(str);
}, str);
}

}

private void btnResume_Click(object sender, EventArgs e)
{
this.btnResume.Enabled = false;
this.btnSuspend.Enabled = true;
this.suspend = false;
//this.auto.Set();
manualResetEvent.Set();
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b5bed51
2014-09-03 · TA获得超过469个赞
知道小有建树答主
回答量:210
采纳率:100%
帮助的人:57.6万
展开全部
你的this.Test_thing();位于main()
因而...Thread.Sleep(8000);...执行于main() 所处的线程,这里Thread代表的是主线程,所以sleep的是主线程

改成newThread.sleep(1000)就行了,

或者到StartWork里面去执行Thread.sleep(1000)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sq_zhuyi
2010-01-23 · TA获得超过680个赞
知道小有建树答主
回答量:1127
采纳率:0%
帮助的人:1007万
展开全部
thread th = new thread(new threadstart(test));
th.start();

void test()
{
for(int i=0;i<100;i++){
thread.sleep(50);//当前线程(你所谓的子线程)休息50毫秒
console.writeline(i);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2571d37bb
推荐于2017-09-17 · 知道合伙人软件行家
百度网友2571d37bb
知道合伙人软件行家
采纳数:1971 获赞数:7905
前端工程师

向TA提问 私信TA
展开全部
C#中sleep和wait的区别。分享给大家供大家参考。具体分析如下:
sleep和wait都是使线程暂时停止执行的方法,但它们有很大的不同。
①. sleep是线程类Thread 的方法,它是使当前线程暂时睡眠,可以放在任何位置。
而wait是Object类的方法,它是使当前线程暂时放弃对象的使用权进行等待,必须放在同步方法或同步块里。
②. Sleep使用的时候,线程并不会放弃对象的使用权,即不会释放对象锁,所以在同步方法或同步块中使用sleep,一个线程访问时,其他的线程也是无法访问的。
而wait是会释放对象锁的,就是当前线程放弃对象的使用权,让其他的线程可以访问。
③. 线程执行wait方法时,需要另一个线程调用notify进行唤醒。
而sleep只是暂时休眠一定时间,时间到了之后,自动恢复运行,不需另外的线程唤醒。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式