问题描述
我在界面上放了两个按钮控件,一个start,一个stop,我按了start,它就开始向串口开始发码,一直循环发码,不会停,现在我想用stop按钮来停下这个发码过程。可是我发现那个start按钮下的循环一直在进行,我界面上其他按钮全动不了?怎么办啊?求指教!!本人是菜鸟级别的,希望大家多多指教。
解决方案
解决方案二:
试试用一个线程控制
解决方案三:
用BackgroundWorker去做
解决方案四:
弱弱地问下,是在哪个地方设置一个新线程啊?循环里面还是stop按钮下面啊?
解决方案五:
不是两个按钮控件不能同时的问题,是按了开始按钮后,界面都已经死掉,没办法移动了吧。
解决方案六:
用BackgroundWorker控件最简单,已经给你封装好了
解决方案七:
使用线程可以实现两个按钮同时用,要不你要等一个按钮执行完才能使用另一个
解决方案八:
用了BackgroundWorker控件之后,我要把那串码写到同一界面的textbox(又叫sending)中,出现异常:"线程间操作无效:从不是创建控件“sending”的线程访问它"。这个是怎么回事啊?
解决方案九:
就是这样的,界面控件只能创建他的线程访问,如果可能的话,你可以在RunWorkerCompleted事件里去处理后台完成以后操作的界面,要不然就要用委托了,或者如果无所谓线程安全的话,设置控件属性CheckForIllegalCrossThreadCalls=false;
解决方案十:
给你简单说明一下。BackgroundWorkerbackgroundWorker1=newBackgroundWorker();backgroundWorker1.DoWork+=newSystem.ComponentModel.DoWorkEventHandler(backgroundWorker1_DoWork);backgroundWorker1.RunWorkerCompleted+=newRunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);backgroundWorker1.RunWorkerAsync();while(backgroundWorker1.IsBusy){Application.DoEvents();}publicvoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse){Control.CheckForIllegalCrossThreadCalls=false;System.Diagnostics.Processp=newSystem.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+=newDataReceivedEventHandler(Output);//开始执行p.Start();p.BeginOutputReadLine();p.StandardInput.WriteLine(Commandp);p.StandardInput.WriteLine("Exit");p.WaitForExit();p.Close();p.Dispose();}publicvoidbackgroundWorker1_RunWorkerCompleted(objectsender,RunWorkerCompletedEventArgse){ObjStateStObj1=newObjState();StObj1.value="转换成功";StObj1.identifier=statusIdentifier;this.SetStatus(StObj1);}
解决方案十一:
该回复于2011-12-15 13:55:00被版主删除
解决方案十二:
同意楼上的说法估计你是在主线程中处理start功能的而且是一直循环自己不会自动停止界面上都没时间去接受处理消息当然你点击不聊stop按钮了吧Start功能放在另外一个新建的线程里实现stop在主线程里实现就行了如上的方法有点太大材小用了吧
解决方案十三:
如果不是急着赶项目,建议楼主使用多线程,其中知道就用到多线程和委托。熟悉这两个东西就可以了
解决方案十四:
多线程控制就不会卡了