C# 怎样通知另外一个线程该干什么了

mrnian2008 2010-11-25 09:05:43
打个比方,我建一个窗体Form1,含两个按扭控件button1和button2,点击button1时,开启线程Thread1,该线程开始录音并写Wav文件,当我点击button2时,想让该线程停止录音并写Wav文件尾。问題:怎样让Thread1接收到button2的命令?
...全文
293 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2010-11-25
  • 打赏
  • 举报
回复
带有消息机制的线程 - CustomMessageQueue(c#)
http://blog.csdn.net/wuyazhe/archive/2007/09/04/1771470.aspx
  • 打赏
  • 举报
回复
正确的做法是使用信号量http://www.cnblogs.com/luminji/archive/2010/09/17/1829360.html
ayidream 2010-11-25
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Threading;

namespace ConsoleTest
{
class Program
{
static BackgroundWorker bw = new BackgroundWorker();
static void Main(string[] args)
{
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);

bw.RunWorkerAsync("Hello to worker");

Console.WriteLine("press enter in the next 5 seconds to cancel.");
Console.ReadLine();
if (bw.IsBusy)
{
bw.CancelAsync();
}
Console.ReadLine();
}

static void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Console.WriteLine("Reached " + e.ProgressPercentage + "%");
}

static void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
Console.WriteLine("You cancelled!");
}
else if (e.Error != null)
{
Console.WriteLine("Worker exception: " + e.Error.ToString());
}
else
{
Console.WriteLine("Complete - " + e.Result); // from DoWork
}
}

static void bw_DoWork(object sender, DoWorkEventArgs e)
{
Console.WriteLine(e.Argument.ToString());
for (int i = 0; i < 5; i++)
{
if (bw.CancellationPending)
{
e.Cancel = true;
return;
}

bw.ReportProgress(i * 20);
Thread.Sleep(1000);
}

e.Result = 123;
}
}


用BackgroundWorker,参考Console程序,改成你要的WinForm即可
headsonlkc 2010-11-25
  • 打赏
  • 举报
回复
private bool flag = true吧
zjx198934 2010-11-25
  • 打赏
  • 举报
回复
设置一个标记位
bool flag = true
当Thread1中录音并写Wav文件必定是个迭代 那么在这个迭代中判断标记位是否为TURE,为TRUE就继续执行
为FALSE则推出循环 当然在退出时你可以记录当前的一些参数 一共你可以继续!

这样你要在点击utton2是停止他就很容易了,我想你也看出来了,把flag职位FALSE就可以了!
w568412 2010-11-25
  • 打赏
  • 举报
回复
关注中,我和楼主有同样的疑惑
szzzp110 2010-11-25
  • 打赏
  • 举报
回复
点击button2是主线程命令,使用委托 操作thread1线程
wolftop 2010-11-25
  • 打赏
  • 举报
回复
让每个线程有个自己的消息队列
freetd 2010-11-25
  • 打赏
  • 举报
回复
每日路过收数......
随着通信电子技术的迅速发展,信息技术给家居行业产生了深远的影响,家居环境的智能化监控已经成为智能家居的一个重要的发展方向。人们逐渐对自己的生活提出一种更高的要求,他们需要一种智能化、可交互,并且融合现代创新科技的产品来改善他们的生活环境,使他们生活更加安全、舒适、便捷、智能。本文根据智能家居的发展背景和研究现状,并且从实用性和可行性角度出发,研究设计了一种基于STM32单片机的智能家居系统。该系统由一个多功能综合的技术系统组成,各个多功能子系统间具有协同配合能力。基于STM32单片机实现的功能子系统包括:智能温度检测,智能湿度检测,智能烟雾/火灾检测智能检测,无线传输,人机交互机构,风扇调节,报警模块。 整个系统分为前端51单片机采集板和后端STM32单片机接收板。 采集板使用DHT11温湿度传感器、MQ烟雾传感器完成室内家居环境的采集。然后通过nRFL24L01将采集到的数据发送给后端。接收板使用LCD1602完成数据显示、使用蜂鸣器模块报警,使用风扇驱动模块调节室内家居环境。本文完成了智能家居控制系统前端、后端软硬件的设计,使用Altium designer绘制了电路原理图,使用Keil C完成了51单片机和STM32单片机的编程与调试。 最后,对本文设计的基于STM32的智能家居控制系统进行部署调试。试验结果表明,该系统可成功应用在智能家居环境检测调节和火灾安全防护的领域,可提高家居生活智能化水平。

111,129

社区成员

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

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

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