从其他线程读取值。
我创建了一个线程。 如何从 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以通过创建
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
(notBeginInvoke
, since that won't wait for it to finish)