Click to Rate and Give Feedback
MSDN
MSDN Library
.NET Development
.NET Framework 3.5
Thread Class
Thread Methods
 Suspend Method
Collapse All/Expand All Collapse All
This page is specific to
Microsoft Visual Studio 2008/.NET Framework 3.5

Other versions are also available for the following:
.NET Framework Class Library
Thread..::.Suspend Method

NOTE: This API is now obsolete.

Either suspends the thread, or if the thread is already suspended, has no effect.

Namespace:  System.Threading
Assembly:  mscorlib (in mscorlib.dll)
Visual Basic (Declaration)
<ObsoleteAttribute("Thread.Suspend has been deprecated.  Please use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources.  http://go.microsoft.com/fwlink/?linkid=14202",  _
    False)> _
<SecurityPermissionAttribute(SecurityAction.Demand, ControlThread := True)> _
<SecurityPermissionAttribute(SecurityAction.Demand, ControlThread := True)> _
Public Sub Suspend
Visual Basic (Usage)
Dim instance As Thread

instance.Suspend()
C#
[ObsoleteAttribute("Thread.Suspend has been deprecated.  Please use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources.  http://go.microsoft.com/fwlink/?linkid=14202", 
    false)]
[SecurityPermissionAttribute(SecurityAction.Demand, ControlThread = true)]
[SecurityPermissionAttribute(SecurityAction.Demand, ControlThread = true)]
public void Suspend()
Visual C++
[ObsoleteAttribute(L"Thread.Suspend has been deprecated.  Please use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources.  http://go.microsoft.com/fwlink/?linkid=14202", 
    false)]
[SecurityPermissionAttribute(SecurityAction::Demand, ControlThread = true)]
[SecurityPermissionAttribute(SecurityAction::Demand, ControlThread = true)]
public:
void Suspend()
JScript
public function Suspend()
ExceptionCondition
ThreadStateException

The thread has not been started or is dead.

SecurityException

The caller does not have the appropriate SecurityPermission.

If the thread is already suspended, this method has no effect.

Caution noteCaution:

Do not use the Suspend and Resume methods to synchronize the activities of threads. You have no way of knowing what code a thread is executing when you suspend it. If you suspend a thread while it holds locks during a security permission evaluation, other threads in the AppDomain might be blocked. If you suspend a thread while it is executing a class constructor, other threads in the AppDomain that attempt to use that class are blocked. Deadlocks can occur very easily.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 1.1, 1.0
Obsolete (compiler warning) in 3.5
Obsolete (compiler warning) in 3.5 SP1
Obsolete (compiler warning) in 3.0
Obsolete (compiler warning) in 3.0 SP1
Obsolete (compiler warning) in 3.0 SP2
Obsolete (compiler warning) in 2.0
Obsolete (compiler warning) in 2.0 SP1
Obsolete (compiler warning) in 2.0 SP2
Tags What's this?: Add a tag
Community Content   What is Community Content?
Add new content RSS  Annotations
Obsolete but still necessary in certain instances      phoenix11   |   Edit   |   Show History

Constructor System.Diagnostics.StackTrace(Thread, bool) requires that a thread be in the Suspended state, which seems to make it necessary to call Thread.Suspend().

I hope that this dependency is fixed before this method is removed from the API.

What if it's not for synchronization?      Randy in Marin   |   Edit   |   Show History

I have a multi-threaded service in which I use thread suspend and resume to handle service pause and continue events. The service pause event suspends worker threads without releasing resources. For the stop event, a flag is set to request all worker threads to stop. Processing stops when a safe point is reached or after a timeout. I could do something similar for a pause (e.g., acquire a write lock to block threads that acquire-release read locks at specific locations), but suspend seems more like a pause. Also, suspend seems more reliable if you really need it to pause quickly and pause in all cases. Perhaps the current version of suspend should be replaced with a safer version (e.g., it suspends at the next safe location)?

Processing
© 2009 Microsoft Corporation. All rights reserved. Terms of Use | Trademarks | Privacy Statement
Page view tracker