ResetAbort_internal ();
}
-#if NET_4_0
[HostProtectionAttribute (SecurityAction.LinkDemand, Synchronization = true, ExternalThreading = true)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
[ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
public extern static bool Yield ();
-#endif
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public ThreadPriority Priority {
get {
- return(ThreadPriority.Lowest);
+ return (ThreadPriority)GetPriority (Internal);
}
set {
- // FIXME: Implement setter.
+ // FIXME: This doesn't do anything yet
+ SetPriority (Internal, (int)value);
}
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private extern static void Abort_internal (InternalThread thread, object stateInfo);
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern static int GetPriority (InternalThread thread);
+
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern static void SetPriority (InternalThread thread, int priority);
+
[SecurityPermission (SecurityAction.Demand, ControlThread=true)]
public void Abort ()
{
public void Start() {
// propagate informations from the original thread to the new thread
- if (!ExecutionContext.IsFlowSuppressed ())
- ec_to_set = ExecutionContext.Capture ();
+ ec_to_set = ExecutionContext.Capture (false, true);
Internal._serialized_principal = CurrentThread.Internal._serialized_principal;
// Thread_internal creates and starts the new thread,
Internal.stack_size = CheckStackSize (maxStackSize);
}
- [MonoTODO ("limited to CompressedStack support")]
public ExecutionContext ExecutionContext {
[ReliabilityContract (Consistency.WillNotCorruptState, Cer.MayFail)]
get {
_ec = new ExecutionContext ();
return _ec;
}
+ internal set {
+ _ec = value;
+ }
+ }
+
+ internal bool HasExecutionContext {
+ get {
+ return _ec != null;
+ }
+ }
+
+ internal void BranchExecutionContext (out ExecutionContext.Switcher switcher)
+ {
+ if (_ec == null) {
+ switcher = new ExecutionContext.Switcher ();
+ } else {
+ switcher = new ExecutionContext.Switcher (_ec);
+ _ec.CopyOnWrite = true;
+ }
+ }
+
+ internal void RestoreExecutionContext (ref ExecutionContext.Switcher switcher)
+ {
+ if (switcher.IsEmpty) {
+ _ec = null;
+ return;
+ }
+
+ switcher.Restore (_ec);
}
public int ManagedThreadId {
throw new NotImplementedException ();
}
#endif
+
+ internal CultureInfo GetCurrentUICultureNoAppX ()
+ {
+ return CultureInfo.CurrentUICulture;
+ }
}
}