Доступ к управлению формами из обработчика функций на C # - PullRequest
0 голосов
/ 19 мая 2018

Я создал интерактивную оболочку на 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;
        }


    }

1 Ответ

0 голосов
/ 19 мая 2018

Если вы напишите это в своем установщике:

static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
    if(textBox1.InvokeRequired)
    {
        textBox1.BeginInvoke((MethodInvoker) delegate() {textBox1.Text = outLine.Data;});    
    }
    else
    {
        textBox1.Text = outLine.Data;
    }
}

Это заставит набор в потоке пользовательского интерфейса.Я нашел это из этого вопроса: стек вопрос

...