Is there someway of letting an oncomplete event run in Async. The oncomplete event is called from an external dll. The external dll uses Async and I am creating a wrapper for it that hides multithreading.
I Have tried using AutoResetEvents but these get stuck on the WaitOne as the oncomplete event which resets the AutoResetEvent only runs after the function is completed.
From what I can pickup from the external Dll, the object tree needs to be synced to the main form in order to function. This forces everything on a single thread. GetTag is called as GetTag(this).
protected EventWaitHandle SyncEvent;
public string GetTag(object syncObject)
{
string lResult = "";
SyncEvent = new AutoResetEvent(false);
XiServer lOPCServer = new XiServer(OPCServer.ServerID, OPCServer.ApplicationName, syncObject); //create local instance of server synced to mainform
lOPCServer.Initiate(OnInitiated2, null); //Connect server
SyncEvent.WaitOne(); //Wait here for for connect to finish, Freezes here
if (ServerTree == null)
ServerTree = new ObjectTree(lOPCServer, lOPCServer.ServerInfo.ServerName);
DialogResult dlr = ServerTree.ShowDialog();
if (dlr == DialogResult.OK)
{
lResult = ServerTree.SelectedObject.InstanceId.FullyQualifiedId;
}
lOPCServer.Dispose();
return lResult;
}
private void OnInitiated2(Exception aError, object asyncState)
{
if (aError != null)
{
GlobalException = aError;
}
SyncEvent.Set();
}
So in short, is there someway I can let the code wait till after the Initiate was finsihed? I dont have access to the initiate code.
Okay I found away around this. I keep checking a field that should be set last on on the initiate function. On the server object I am using the isConnected field