Я создал интерактивную оболочку на C#, но я не знаю, как получить доступ к моему элементу управления формами и присвоить полученные значения моему текстовому полю, я знаю, что потоки не могут получить доступ к потоку пользовательского интерфейса, но в этом случае я не выгляжу чтобы иметь возможность исправить проблему, в этой оболочке будет много входных и выходных данных, и я хочу убедиться, что все отображается для пользователя.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Process process = new Process();
process.StartInfo.FileName = "echoo.exe";
process.StartInfo.Arguments = "";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler);
process.StartInfo.RedirectStandardInput = true;
process.Start();
StreamWriter sw = process.StandardInput;
process.BeginOutputReadLine();
process.BeginErrorReadLine();
sw.WriteLine("sent");
process.WaitForExit();
}
static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
Form1.textBox1.Text = outLine.Data;
}
}





Если вы напишете это в своем сеттере:
static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
if (textBox1.InvokeRequired)
{
textBox1.BeginInvoke((MethodInvoker) delegate() {textBox1.Text = outLine.Data;});
}
else
{
textBox1.Text = outLine.Data;
}
}
Это заставит набор в поток пользовательского интерфейса. Я нашел это из этого вопроса: стек вопрос
О, ха-ха, вы уже находитесь в классе Form1. Просто удалите Form1. из переменных текстового поля. Обновленный ответ.
та же ошибка произошла снова, на этот раз я удалил статику и process.WaitForExit();, поскольку это мешает пользовательскому интерфейсу обрабатывать назначение, я думаю, и теперь он работает, спасибо.
ошибка: ссылка на объект требуется для нестатического поля, метода или свойства 'Form1.textBox1'