我有一个c#Forms程序,如果连接了Arduino,该程序会多线程。如果是这样,将出现一个文本框,现在我会收到一个错误:
System.InvalidOperationException:“跨线程操作无效:控制'GyroForm'是从创建该线程的线程之外的线程访问的。'
来自的代码行是这样的:
outputBox.Width = this.Width - 150;
这没有显示文本框,但是无论采取任何措施都不能修改所述文本框。
我创建了一个名为“ updateOutputBox”的函数,它在自己的线程上。线程在这里初始化:
Thread outputBoxThread;
...
ThreadStart outputBoxRef = new ThreadStart(updateOutputBox);
outputBoxThread = new Thread(outputBoxRef);
outputBoxThread.Start();
这是我的updateOutputBox函数:
public void updateOutputBox() {
while (true) {
outputBox.Width = this.Width - 150;
outputBox.Height = this.Height - (outputBox.Location.Y + 50);
outputBox.Location = new Point(100, connectionStatus.Height + 50);
}
}
问题是我的文本框位于线程“ GyroForm”(我的项目)上,并且我希望它属于线程“ outputBoxThread”,这样我才不会遇到有关跨线程的任何错误。
如果没有办法做到这一点,那我该怎么做而不必为每个操作调用请求?
谢谢!
答案 0 :(得分:0)
尝试一下
public void updateOutputBox() {
while (true) {
if (outputBox.InvokeRequired)
{
outputBox.Invoke(new MethodInvoker(delegate {
outputBox.Width = this.Width - 150;
outputBox.Height = this.Height - (outputBox.Location.Y + 50);
outputBox.Location = new Point(100, connectionStatus.Height + 50);
}));
}
}
}