Thread.Start 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
使线程得以按计划执行。
重载
Start() |
导致操作系统将当前实例的状态更改为 Running。 |
Start(Object) |
导致操作系统将当前实例的状态更改为 Running,并选择提供包含线程执行的方法要使用的数据的对象。 |
Start()
导致操作系统将当前实例的状态更改为 Running。
public:
void Start();
public void Start ();
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void Start ();
member this.Start : unit -> unit
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
member this.Start : unit -> unit
Public Sub Start ()
- 属性
例外
线程已启动。
内存不足,无法启动此线程。
示例
下面的示例创建并启动一个线程。
using namespace System;
using namespace System::Threading;
public ref class ThreadWork
{
public:
static void DoWork()
{
for ( int i = 0; i < 3; i++ )
{
Console::WriteLine( "Working thread..." );
Thread::Sleep( 100 );
}
}
};
int main()
{
ThreadStart^ myThreadDelegate = gcnew ThreadStart(&ThreadWork::DoWork);
Thread^ thread1 = gcnew Thread( myThreadDelegate );
thread1->Start();
for ( int i = 0; i < 3; i++ )
{
Console::WriteLine( "In main." );
Thread::Sleep( 100 );
}
}
// The example displays output like the following:
// In main.
// Working thread...
// In main.
// Working thread...
// In main.
// Working thread...
using System;
using System.Threading;
public class ThreadWork
{
public static void DoWork()
{
for(int i = 0; i<3;i++) {
Console.WriteLine("Working thread...");
Thread.Sleep(100);
}
}
}
class ThreadTest
{
public static void Main()
{
Thread thread1 = new Thread(ThreadWork.DoWork);
thread1.Start();
for (int i = 0; i<3; i++) {
Console.WriteLine("In main.");
Thread.Sleep(100);
}
}
}
// The example displays output like the following:
// In main.
// Working thread...
// In main.
// Working thread...
// In main.
// Working thread...
Imports System.Threading
Public Class ThreadWork
Public Shared Sub DoWork()
Dim i As Integer
For i = 0 To 2
Console.WriteLine("Working thread...")
Thread.Sleep(100)
Next i
End Sub
End Class
Class ThreadTest
Public Shared Sub Main()
Dim thread1 As New Thread(AddressOf ThreadWork.DoWork)
thread1.Start()
Dim i As Integer
For i = 0 To 2
Console.WriteLine("In main.")
Thread.Sleep(100)
Next
End Sub
End Class
' The example displays output like the following:
' In main.
' Working thread...
' In main.
' Working thread...
' In main.
' Working thread...
注解
线程处于 ThreadState.Running 状态后,操作系统可将其计划为执行。 线程开始在由 ThreadStart ParameterizedThreadStart 提供给线程构造函数的或委托表示的方法的第一行执行。 请注意,对的调用不 Start 会阻止调用线程。
备注
如果此重载与使用委托创建的线程一起使用 ParameterizedThreadStart , null
则将传递给由该线程执行的方法。
线程终止后,将无法通过对的另一次调用来重新启动 Start
。
另请参阅
适用于
Start(Object)
导致操作系统将当前实例的状态更改为 Running,并选择提供包含线程执行的方法要使用的数据的对象。
public:
void Start(System::Object ^ parameter);
public void Start (object? parameter);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void Start (object? parameter);
public void Start (object parameter);
member this.Start : obj -> unit
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
member this.Start : obj -> unit
Public Sub Start (parameter As Object)
参数
- parameter
- Object
一个对象,包含线程执行的方法要使用的数据。
- 属性
例外
线程已启动。
内存不足,无法启动此线程。
该线程是使用 ThreadStart 委托而不是 ParameterizedThreadStart 委托创建的。
示例
下面的示例 ParameterizedThreadStart 使用静态方法和实例方法创建委托。
using namespace System;
using namespace System::Threading;
namespace SystemThreadingExample
{
public ref class Work
{
public:
void StartThreads()
{
// Start a thread that calls a parameterized static method.
Thread^ newThread = gcnew
Thread(gcnew ParameterizedThreadStart(Work::DoWork));
newThread->Start(42);
// Start a thread that calls a parameterized instance method.
Work^ someWork = gcnew Work;
newThread = gcnew Thread(
gcnew ParameterizedThreadStart(someWork,
&Work::DoMoreWork));
newThread->Start("The answer.");
}
static void DoWork(Object^ data)
{
Console::WriteLine("Static thread procedure. Data='{0}'",
data);
}
void DoMoreWork(Object^ data)
{
Console::WriteLine("Instance thread procedure. Data='{0}'",
data);
}
};
}
//Entry point of example application
int main()
{
SystemThreadingExample::Work^ samplework =
gcnew SystemThreadingExample::Work();
samplework->StartThreads();
}
// This example displays output like the following:
// Static thread procedure. Data='42'
// Instance thread procedure. Data='The answer.'
using System;
using System.Threading;
public class Work
{
public static void Main()
{
// Start a thread that calls a parameterized static method.
Thread newThread = new Thread(Work.DoWork);
newThread.Start(42);
// Start a thread that calls a parameterized instance method.
Work w = new Work();
newThread = new Thread(w.DoMoreWork);
newThread.Start("The answer.");
}
public static void DoWork(object data)
{
Console.WriteLine("Static thread procedure. Data='{0}'",
data);
}
public void DoMoreWork(object data)
{
Console.WriteLine("Instance thread procedure. Data='{0}'",
data);
}
}
// This example displays output like the following:
// Static thread procedure. Data='42'
// Instance thread procedure. Data='The answer.'
Imports System.Threading
Public Class Work
Shared Sub Main()
' Start a thread that calls a parameterized static method.
Dim newThread As New Thread(AddressOf Work.DoWork)
newThread.Start(42)
' Start a thread that calls a parameterized instance method.
Dim w As New Work()
newThread = New Thread(AddressOf w.DoMoreWork)
newThread.Start("The answer.")
End Sub
Public Shared Sub DoWork(ByVal data As Object)
Console.WriteLine("Static thread procedure. Data='{0}'",
data)
End Sub
Public Sub DoMoreWork(ByVal data As Object)
Console.WriteLine("Instance thread procedure. Data='{0}'",
data)
End Sub
End Class
' This example displays output like the following:
' Static thread procedure. Data='42'
' Instance thread procedure. Data='The answer.'
注解
线程处于 ThreadState.Running 状态后,操作系统可将其计划为执行。 线程开始在由 ThreadStart ParameterizedThreadStart 提供给线程构造函数的或委托表示的方法的第一行执行。 请注意,对的调用不 Start 会阻止调用线程。
线程终止后,将无法通过对的另一次调用来重新启动 Start
。
利用此重载和 ParameterizedThreadStart 委托,可以轻松地将数据传递给线程过程,但该方法不是类型安全的,因为任何对象都可以传递到此重载。 将数据传递给线程过程的一种更可靠的方法是将线程过程和数据字段放入辅助角色对象。 有关详细信息,请参阅 在启动时创建线程和传递数据。