.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()); // 現在のカウンタを出力する } } } }