从其他线程读取值。

发布于 2024-11-02 19:06:11 字数 869 浏览 1 评论 0原文

我创建了一个线程。 如何从 GUI 线程读取变量值?

我知道如何改变它们。我不知道如何阅读它们。

这就是我用来更改 GUI 线程上的内容的方法:

    public void Log(string message)
    {
        MethodInvoker m = () => { Log_textBox.Text += message; };
        if (InvokeRequired)
        {
            BeginInvoke(m);
        }
        else
        {
            Invoke(m);
        }
    }

我需要从 GUI 线程读取一些值:

    public void StartBot()
    {
        Klient.StartBot(selectedType, (int)nb_count.Value, nb_nonstop.Checked, (...)int.Parse(extra_set.SelectedItem.ToString()));
    }

    private void StartStopButton_Click(object sender, EventArgs e)
    {
            Thread questThread = new Thread(StartBot);
            Klient.RequestToStop = false;
            questThread.Start();
    }

我在使用 Klient.StartBot(...) 参数列表时遇到了跨线程操作错误。

如何修复它?

I created a thread.
How can I read values of variables from GUI thread?

I know how to change them. I don't know how to read them.

This is what I'm using for changing things on GUI thread:

    public void Log(string message)
    {
        MethodInvoker m = () => { Log_textBox.Text += message; };
        if (InvokeRequired)
        {
            BeginInvoke(m);
        }
        else
        {
            Invoke(m);
        }
    }

I need to read some values from GUI thread:

    public void StartBot()
    {
        Klient.StartBot(selectedType, (int)nb_count.Value, nb_nonstop.Checked, (...)int.Parse(extra_set.SelectedItem.ToString()));
    }

    private void StartStopButton_Click(object sender, EventArgs e)
    {
            Thread questThread = new Thread(StartBot);
            Klient.RequestToStop = false;
            questThread.Start();
    }

I'm getting cross thread operation error on line with Klient.StartBot(...) argument list.

How to fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

土豪 2024-11-09 19:06:11

您可以通过创建 Func 从调用的委托返回值。
Invoke 将返回函数的返回值。

或者,您可以在委托内设置一个局部变量,并使用 Invoke 调用它(而不是 BeginInvoke,因为这不会等待它完成)

You can return a value from an invoked delegate by creating a Func<ReturnType>.
Invoke will return the function's return value.

Alternatively, you can set a local variable inside the delegate and call it using Invoke (not BeginInvoke, since that won't wait for it to finish)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文