ロック済み マルチスレッドを使うには

  • 2010年12月20日 1:34
     
     

    WindowsXP のアプリを WindowsCE 5.0 用に移植しています。
    WindowsXP BackgroundWorker を使ってマルチスレッドを実現していたのですが、
    WindowsCE では BackgroundWorker が使えないようです。
    WindowsCE でマルチスレッド化する場合、どんな方法が可能でしょうか。

すべての返信

  • 2010年12月20日 4:49
     
     
    兼田さん

    おそらく.NET Framework 2.0以上から、.NET Compact Framework 2.0もしくは3.0への移植かと思われますのでその想定で話をさせていただきます。

    .NET Compact Frameworkでマルチスレッド処理を行うには非同期メソッドかThreadクラスを使う形になると思います。ただ、ThreadクラスにもCompact Frameworkには存在していないメソッドがありますのでご注意ください。

    Thread自体の使い方については以下のドキュメントが参考になると思います。
    http://msdn.microsoft.com/ja-jp/library/7a2f3ay4%28v=vs.80%29.aspx

    また、BackgroundWokerと違い、ThreadクラスではReportProgressなどの進捗状況管理、メインスレッドでの進捗率表示通知などは独自に実装する必要があります。

    特にひっかかりやすいのが、Threadの処理の中でコントロールの状態を操作すると例外が発生することです。これに関してはControl.InvokeRequiedプロパティとControl.Invokeメソッドを使って解決します。
    以下の記事が参考になると思います。
    http://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html

    これ以外にもCompact Frameworkではクラスがメソッドがだいぶ減っていて移植は大変かと思いますが、がんばってください。
  • 2010年12月20日 7:49
     
     

    伊勢シン さんありがとうございます。
    お察しの通り .NET Compact Framework 2.0 への移植をしています。
    Threadクラスを使って何とかやってみようと思います。
    他にもいっぱい使えないものがあって、苦戦しています。