为什么界面上两个按钮控件不能同时进行? 我在界面上放了两个按钮控件,一个start,一个stop,我按了start,它就开始向串口开始发码,一直循环发码,不会停,现在我想用stop按钮来停下这个发码过程。可是我发现那个start按钮下的循环一直在进行,我界面上其他按钮全动不了?怎么办啊?求指教!!本人是菜鸟级别的,希望大家多多指教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 弱弱地问下,是在哪个地方设置一个新线程啊?循环里面还是stop按钮下面啊? 用BackgroundWorker控件最简单,已经给你封装好了 用了BackgroundWorker控件之后,我要把那串码写到同一界面的textbox(又叫sending)中,出现异常:"线程间操作无效: 从不是创建控件“sending”的线程访问它"。这个是怎么回事啊? 就是这样的,界面控件只能创建他的线程访问,如果可能的话,你可以在RunWorkerCompleted事件里去处理后台完成以后操作的界面,要不然就要用委托了,或者如果无所谓线程安全的话,设置控件属性CheckForIllegalCrossThreadCalls = false; 给你简单说明一下。 BackgroundWorker backgroundWorker1 = new BackgroundWorker(); backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(backgroundWorker1_DoWork); backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted); backgroundWorker1.RunWorkerAsync(); while (backgroundWorker1.IsBusy) { Application.DoEvents(); } public void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { Control.CheckForIllegalCrossThreadCalls = false; System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.FileName = "cmd.exe "; //p.StartInfo.FileName = mencoder; //p.StartInfo.Arguments = Commandp; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardInput = true; p.StartInfo.CreateNoWindow = true; p.OutputDataReceived += new DataReceivedEventHandler(Output); //开始执行 p.Start(); p.BeginOutputReadLine(); p.StandardInput.WriteLine(Commandp); p.StandardInput.WriteLine("Exit"); p.WaitForExit(); p.Close(); p.Dispose(); } public void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { ObjState StObj1 = new ObjState(); StObj1.value = "转换成功"; StObj1.identifier = statusIdentifier; this.SetStatus(StObj1); } 同意楼上的说法 估计你是在主线程中 处理start功能的 而且是 一直循环自己不会自动停止 界面上都没时间去接受处理消息 当然你点击不聊stop按钮了 吧Start功能放在另外一个新建的线程里实现 stop 在主线程里实现就行了 如上的方法有点太大材小用了 吧 C#的一个问题 急急急 TextBox能设置格式化显示吗? winform程序打包的默认路径问题? 基础知识请教!! 像.net和DW中那种根据现有输入,提示有现有输入相关属性、方法、标签是怎么做的亚? 请教刚进入公司,学习C#,SQL,HTML.全都没学过.应怎样开始?请不吝赐教!!!! c# 服务问题 如何用installshield 修改 web.config的连接参数?谢谢大家 c#中怎么实现用代理发邮件? 访问IIS元数据库失败 关于远程通信,请教大家一下 winform 中 panel 控件代码绑定背景图片
这个是怎么回事啊?
BackgroundWorker backgroundWorker1 = new BackgroundWorker();
backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
backgroundWorker1.RunWorkerAsync();
while (backgroundWorker1.IsBusy)
{
Application.DoEvents();
} public void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe ";
//p.StartInfo.FileName = mencoder;
//p.StartInfo.Arguments = Commandp;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.CreateNoWindow = true;
p.OutputDataReceived += new DataReceivedEventHandler(Output);
//开始执行
p.Start();
p.BeginOutputReadLine();
p.StandardInput.WriteLine(Commandp);
p.StandardInput.WriteLine("Exit");
p.WaitForExit();
p.Close();
p.Dispose();
} public void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
ObjState StObj1 = new ObjState();
StObj1.value = "转换成功";
StObj1.identifier = statusIdentifier;
this.SetStatus(StObj1);
}