.Net Framework 3.5 までは、Thread.Resume および、Thread.Suspend メソッドは互換性のために残されていましたが、.Net Framework 4.0 以降では廃止されています。残念なお知らせです。以前からマイクロソフトでは、互換性のために残されていると注意喚起はしていたのですが、実際に廃止されると結構ダメージを受けることもあります。
スポンサーリンク
なお .Net Framework4.0 以降、無条件に廃止されているわけではなく、Visual Studio 2010 (v100) までは互換性のために残されていますが、Visual Studio 2012 (v110) から廃止されているようです。Visual Studio のバージョンも関係あるようで、なかなか細かいようです。
廃止されたスレッドの中断と再開
互換性のために残されてたスレッドの中断と再開を行う Thread.Suspend メソッドと Thread.Resume メソッドは使用できなくなりましたので、以下のようなコードは記述できなくなりました。
早め早めの対策を心掛けたいものですが、なかなか腰があがりません。お金もありません。「ノーマネーでフィニッシュです」と言われるとそこで試合終了です。
VB.NET
Imports System.Threading
Class Test
Public Shared Sub Main()
' スレッドの作成
Dim t As New Thread(New ThreadStart(AddressOf TestThread))
t.Start() ' スレッドの開始
Thread.Sleep(50) ' 50ミリ秒スリープ
Console.WriteLine("suspend thread")
t.Suspend() ' スレッドの停止
Thread.Sleep(1000) ' 1秒スリープ
Console.WriteLine("resume thread")
t.Resume() ' スレッドの再開
Console.ReadKey()
End Sub
''<summary>スレッドとして動作するメソッド</summary>
Private Shared Sub TestThread()
For i As Integer = 0 To 99
Thread.Sleep(5) ' 5ミリ秒スリープ
Console.Write(i.ToString()) ' 現在のカウンタを出力
Next
End Sub
End Class
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
// スレッドの作成
Thread t = new Thread(new ThreadStart(TestThread));
t.Start(); // スレッドの開始
Thread.Sleep(50); // 50ミリ秒スリープ
Console.WriteLine("suspend thread");
t.Suspend(); // スレッドの停止
Thread.Sleep(1000); // 1秒スリープ
Console.WriteLine("resume thread");
t.Resume(); // スレッドの再開
Console.ReadKey();
}
//<summary>スレッドとして動作するメソッド</summary>
static void TestThread()
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(5); // 5ミリ秒スリープ
Console.WriteLine(i.ToString()); // 現在のカウンタを出力する
}
}
}
}