Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ WaitForAsyncOperationToFinish()

unsafe int Microsoft.Xna.Framework.WindowsManagedCallbackHandler.WaitForAsyncOperationToFinish ( out ManagedCallType managedCallType,
out uint managedCallArgs )
inline

Definition at line 52 of file WindowsManagedCallbackHandler.cs.

53 {
54 int num = 0;
56 while (true)
57 {
58 bool flag = false;
59 uint num2 = 0u;
60 uint num3 = uint.MaxValue;
61 uint num4 = uint.MaxValue;
62 uint num5 = uint.MaxValue;
63 uint num6 = uint.MaxValue;
64 uint num7 = uint.MaxValue;
65 bool lockTaken = false;
66 try
67 {
70 if (num2 > 64)
71 {
72 return -2147220991;
73 }
74 for (int i = 0; i < nativeToManagedCallbacks.Count; i++)
75 {
77 }
78 num3 = num2 - 5;
80 num4 = num2 - 4;
82 num5 = num2 - 3;
84 num6 = num2 - 2;
86 }
87 finally
88 {
89 if (lockTaken)
90 {
92 }
93 }
94 bool lockTaken2 = false;
95 try
96 {
98 IProxyProcessHandler proxyProcessHandler = _proxyProcessHandler;
99 if (proxyProcessHandler != null)
100 {
101 IntPtr proxyProcessWantsToTalk = proxyProcessHandler.ProxyProcessWantsToTalk;
104 num7 = num2 - 1;
105 *(int*)((ref *(_003F*)(num7 * 4)) + (ref *(_003F*)(&_0024ArrayType_0024_0024_0024BY0EA_0040PAX))) = (int)intPtr2.ToPointer();
106 }
107 else
108 {
109 num2--;
110 }
111 uint num8 = global::_003CModule_003E.WaitForMultipleObjects(num2, (void**)(&_0024ArrayType_0024_0024_0024BY0EA_0040PAX), 0, uint.MaxValue);
112 if (num8 == uint.MaxValue)
113 {
114 uint lastError = global::_003CModule_003E.GetLastError();
115 int num9 = (((int)lastError > 0) ? ((int)(lastError & 0xFFFF) | -2147024896) : ((int)lastError));
116 num = num9;
117 }
118 num8 = num8;
119 if (num8 < num3)
120 {
121 bool flag2 = false;
123 ManagedCallType managedCallType2 = managedCallType;
124 uint num10 = managedCallArgs;
125 num = nativeToManagedCallback.eventSignalledFunction(nativeToManagedCallback.originalWaitHandle, nativeToManagedCallback.pContext, &managedCallType2, &num10, &flag2);
126 if (num >= 0)
127 {
130 if (flag2)
131 {
132 void* dupedWaitHandle = nativeToManagedCallback.dupedWaitHandle;
133 if (dupedWaitHandle != null && dupedWaitHandle != (void*)(-1))
134 {
135 global::_003CModule_003E.CloseHandle(dupedWaitHandle);
136 nativeToManagedCallback.dupedWaitHandle = (void*)(-1);
137 }
139 }
140 }
141 }
142 else if (num8 == num4)
143 {
146 global::_003CModule_003E.SetEvent(_managedFunctionDataCanBeWritten);
147 }
148 else if (num8 != num5 && num8 != num3)
149 {
150 if (num8 == num6)
151 {
152 Thread.CurrentThread.Abort();
153 }
154 else if (num7 != uint.MaxValue && num8 == num7)
155 {
159 global::_003CModule_003E.SetEvent(_proxyProcessHandler.SharedAsyncDataSafeToWrite.ToPointer());
160 }
161 }
162 else
163 {
164 flag = true;
165 }
166 }
167 finally
168 {
169 if (lockTaken2)
170 {
172 }
173 }
174 if (!flag)
175 {
176 break;
177 }
178 global::_003CModule_003E.Sleep(0u);
179 }
180 return num;
181 }
void RemoveAt(int index)
Definition List.cs:824
static void Exit(object obj)
static void Enter(object obj)
static Thread CurrentThread
Definition Thread.cs:312
unsafe void * ToPointer()
Definition IntPtr.cs:210

References Microsoft.Xna.Framework.WindowsManagedCallbackHandler._callManagedPlease, Microsoft.Xna.Framework.WindowsManagedCallbackHandler._managedCallArgs, Microsoft.Xna.Framework.WindowsManagedCallbackHandler._managedCallType, Microsoft.Xna.Framework.WindowsManagedCallbackHandler._managedFunctionDataCanBeWritten, Microsoft.Xna.Framework.WindowsManagedCallbackHandler._newCallbackRegistered, Microsoft.Xna.Framework.WindowsManagedCallbackHandler._parentExitEvent, Microsoft.Xna.Framework.WindowsManagedCallbackHandler._proxyProcessHandler, Microsoft.Xna.Framework.WindowsManagedCallbackHandler._proxyProcessHandlerSyncObject, Microsoft.Xna.Framework.WindowsManagedCallbackHandler._proxyProcessNeedsToChange, Microsoft.Xna.Framework.IProxyProcessHandler.AsyncHResult, Microsoft.Xna.Framework.IProxyProcessHandler.AsyncManagedCallArgument, Microsoft.Xna.Framework.IProxyProcessHandler.AsyncManagedCallType, System.Collections.Generic.List< T >.Count, System.Threading.Thread.CurrentThread, System.Threading.Monitor.Enter(), System.Threading.Monitor.Exit(), Microsoft.Xna.Framework.WindowsManagedCallbackHandler.nativeToManagedCallbacks, System.Collections.Generic.List< T >.RemoveAt(), Microsoft.Xna.Framework.IProxyProcessHandler.SharedAsyncDataSafeToWrite, and System.IntPtr.ToPointer().