PCSDK: Why am I getting a 'no authenticated user' exception?

Why do I receive the below error when I attempt to update a group signal within another group signal’s event?

Exception text: ‘The controller has no authenticated user, call Logon( ) to authenticate a user.’

The connection code did not throw any errors when logging on as the default user to a virtual robot and I am able to update the value right after logging in, but I sometimes get an exception within a group signal’s event handler when updating another group signal’s value. Worked code with a virtual controller:


ControllerInfo controllerInfo = controllers[1];
if (controllerInfo.Availability == Availability.Available)
{
if (_controller != null)
{
_controller.Logoff();
_controller.Dispose();
_controller = null;
}
_controller = ControllerFactory.CreateFrom(controllerInfo);

UserInfo userInfo;
if (_controller.IsVirtual)
userInfo = UserInfo.DefaultUser;
else
{
userInfo = new UserInfo(“abc”, “abc123”);
}
_controller.Logon(userInfo);
}

Signal signal = _controller.IOSystem.GetSignal(“myVariable”);

signal.Value= Convert.ToSingle(2);

The area where the exception occurs is within an event handler raised when another group signal is set. This makes me wonder if this is a threading issue since the event gets fired on its own worker thread, but I have declared the controller and signal as ‘static’ so they should be accessible by all threads - please feel free to correct me on anything sounding fishy. Code throwing exception:

protected override void handleSignalUpdates(object sender, ABB.Robotics.Controllers.IOSystemDomain.SignalChangedEventArgs e)
{

_groupSignals[mySignal].Value = Convert.ToSingle(Value); // exception here !!!

Note: The signal causing the event is different from the one being updated within the handler.

The error I was encountering was cleared up by running the
robot controller object in its own thread with a message queue to issue
commands. I am still uncertain why making the objects static did not work or if
I really got to the root of the problem, but it works for now. I also got to
have a lot of fun with semaphores so that was educational.