In the Level1 class change:
public string Result;
to:
private volatile string _result;
public string Result
{
get { return _result; }
set { _result = value; }
}
This should make sure that reads/writes to the Result are straight to memory.
If this does not work then it is likely that you are creating a new lvl1 object somewhere else in the code we can not see.
If this is the case write a constructor in Level1 that creates a GUID for that instance and check that each time you read/write the Result property.