this.textBox1.Text=" "; 报错c#
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了this.textBox1.Text=" "; 报错c#相关的知识,希望对你有一定的参考价值。
异步处理,不知道怎么让textBox1.Text=" ";接受,报错,代码:
private void button3_Click(object sender, EventArgs e)
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
//p.StartInfo = new ProcessStartInfo(@"C:\windows\system32\cmd.exe", "dir c:\\");
//p.StartInfo.Arguments = "dir c:\\";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;//可能接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
p.StartInfo.CreateNoWindow = true;//不显示程序窗口
p.EnableRaisingEvents = true;
//p.Start();//启动程序
//向CMD窗口发送输入信息:
//string cmd = @"C:\Dropbox\wp\all\ffutool.exe -flash " + @"C:\Dropbox\8916wp\wp8.ffu" + " -force";
//string cmd = @"C:\Dropbox\wp\all\ffutool.exe --list ";
//string cmd = "dir c:\\";
//p.StandardInput.WriteLine(cmd); //10秒后重启(C#中可不好做哦)
p.Start();
p.StandardInput.WriteLine("dir c:\\");
p.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
//StreamWriter sortStreamWriter = p.StandardInput;
// 异步获取命令行内容
p.BeginOutputReadLine();
// 为异步获取订阅事件
//sortStreamWriter.Close();
p.StandardInput.WriteLine("exit");
// Wait for the sort process to write the sorted text lines.
p.WaitForExit();
p.Close();
public delegate void OutputDataReceived(Object sender, DataReceivedEventArgs e);
void process_OutputDataReceived(Object sender, DataReceivedEventArgs e)
if (!String.IsNullOrEmpty(e.Data))
//numOutputLines++;
// Add the text to the collected output.
//sortOutput.Append(Environment.NewLine +
// "[" + numOutputLines.ToString() + "] - " + outLine.Data);
//this.textBox1.Text=" ";
//textBox1.AppendText(Environment.NewLine + e.Data.ToString());
MessageBox.Show(Environment.NewLine + e.Data.ToString());
//this.feedback.Text = e.Data.ToString() + Environment.NewLine + this.feedback.Text;
在process_OutputDataReceived方法中,不能访问textbox,报线程访问错误。那怎么才能向textbox里面写内容呢??
不允许子线程操作主线程控件,这是出于安全考虑。
解决有两个方法:
1.窗体Load时候加下面一行代码;
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=false;2.写委托,通过委托操作控件。
想知道委托的具体写法,看着还有点迷糊。
追答加入下面的代码:
private delegate void SetTextDelegate(string txt);private void SetText(string txt)
if (this.textBox1.InvokeRequired)
SetTextDelegate delegate= new SetTextDelegate(SetText);
this.textBox1.Invoke(delegate, txt);
else
textBox1.Text = txt;
将报错的那句textBox1.Text=" ";改为:
SetText(str);本回答被提问者采纳 参考技术B 楼下网友回答正确。我补充下,你要想process_OutputDataReceived里能执行,用 invoke() 的方式来是访问.
if (this.textBox1.InvokeRequired) //这里是表示,如果textBox1不在主线程上,就用委托
this.Invoke(new CallBack(EnableButton)); //EnableButton是一个delegate
else
textBox1.Text = "Enabled";
追问
写到process_OutputDataReceived
if (!String.IsNullOrEmpty(e.Data))这个判断里面吗??CallBack是哪个空间呢?
我的邮箱:590437@163.com.
如果其中有一行需要输出很多的=====================success ,或者===============fail (不止这几个等号,需要执行很长时间,)这一行就不显了,请问这个怎么办啊?
以上是关于this.textBox1.Text=" "; 报错c#的主要内容,如果未能解决你的问题,请参考以下文章
c#中 Double num1 = Convert.ToDouble(this.textBox1.Text.ToString())是啥意思,里面的()是啥意思