【问题标题】:Accessing forms control from function handler on C#从 C# 上的函数处理程序访问表单控件
【发布时间】:2018-05-19 10:22:57
【问题描述】:

我在 C# 上创建了一个交互式 shell,但我不知道如何访问我的表单控件并将接收到的值分配给我的文本框,我知道线程无法访问 UI 线程,但在这种情况下,我不知道'似乎无法解决问题,该外壳中将有很多输入和输出,我想确保向用户显示所有内容。

 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;
        }


    }

【问题讨论】:

    标签: c# multithreading forms ms-access


    【解决方案1】:

    如果你在你的 setter 中写这个:

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

    它将强制设置到 UI 线程。我从这个问题中找到了这个:stack question

    【讨论】:

    • 错误:非静态字段、方法或属性“Form1.textBox1”需要对象引用
    • 哦哈哈,您已经在 Form1 类中了。只需从文本框变量中删除 Form1.。更新了答案。
    • 同样的错误再次发生,这次我删除了 static 和 process.WaitForExit(); 因为这会阻止 ui 处理分配,我猜它现在可以工作了,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2013-05-14
    相关资源
    最近更新 更多