- Home /
Question by
DylanDodds · Jun 28, 2013 at 08:51 PM ·
guierror
Can't edit GUI from another thread
So I'm working on my own network class using .net sockets but I can't send an error message to the main menu when the socket couldn't connect.
Here is the main menu code to set the error message:
public void showMessage(string str){
GUIStyle style = new GUIStyle();
style.normal.textColor = Color.red;
GUI.Label(new Rect((Screen.width /2) - 100, (Screen.height / 2) - 140, 200, 25), str, style);
}
Which is called from the network class...
try{
Socket sock = (Socket) ar.AsyncState;
sock.EndConnect(ar);
buffer = new byte[sock.ReceiveBufferSize];
sock.BeginReceive(buffer, 0, sock.ReceiveBufferSize, 0 , new AsyncCallback(ReadCallBack), sock);
}catch{
mainMenu.showMessage("Couldn't reach Server");
}
and the network class is defined from the main menu as an entirely new class from onGUI...
network net = new network(new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp), this);
But I get this error:
Constructors and field initializers will be executed from the loading thread when loading a scene. Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function. I get the error but I don't know how to fix it. Any help?GetStyleStatePtr can only be called from the main thread.
Comment
Best Answer
Answer by Immanuel-Scholz · Jun 28, 2013 at 09:06 PM
You cannot call GUI functions directly from any function you like. Instead, you should call them from within OnGUI
so change your showMessage to remember the message to be displayed and add a OnGUI function to your main menu that displays the message then.
string message;
public void showMessage(string str){
this.message = str;
}
void OnGUI()
{
GUIStyle style = new GUIStyle();
style.normal.textColor = Color.red;
GUI.Label(new Rect((Screen.width /2) - 100, (Screen.height / 2) - 140, 200, 25), message, style);
}
Your answer
![](https://koobas.hobune.stream/wayback/20220613105052im_/https://answers.unity.com/themes/thub/images/avi.jpg)