CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。
![.NETマルチスレッドプログラミング 目次](https://cdn-ak-scissors.b.st-hatena.com/image/square/106c7e478be88bc515873fc79870c7b92dd94618/height=288;version=1;width=512/https%3A%2F%2Fcodezine.jp%2Fstatic%2Fcommon%2Fimages%2Fczlogo4fb_ogp.png)
注意:この記事は、.NET Framework 1.1以前を想定して書かれています。.NET Framework 2.0以降でも動作するとは思いますが、.NET Framework 2.0以降では「BackgroundWorkerクラスを使用して進行状況ダイアログを作成する」の方を参考にしてください。 ここでは、時間のかかる処理を行っている時にその進行状況を表示する、進行状況ダイアログを表示する方法を紹介します。 進行状況ダイアログを作成するには、「時間のかかる処理の進行状況を表示する」で紹介した方法が参考になります。ここではその内、マルチスレッドを使用する方法で進行状況ダイアログを作る方法を紹介します。 補足:ここではDoEventsメソッドを使った方法は紹介しませんが、「時間のかかる処理の進行状況を表示する」を参考にすれば簡単でしょう。しかしDoEventsメソッドを使って進行状況ダイ
時間のかかる処理の進行状況を表示する大きなファイルを読み込んだり、大量のファイルをコピーする時のように、時間のかかる処理を行うとき、何の表示もないとユーザーは「アプリケーションがフリーズしたのでは」と不安になってしまうかもしれません。そのようなときは、処理の進行状況をメッセージやプログレスバーで表示することが有効です。ここでは、時間のかかる処理の進行状況を表示する方法と、ユーザーが途中でキャンセルできるようにする方法を説明します。 ここでは単純な例として、WindowsフォームにLabelコントロール(Label1)とProgressBarコントロール(ProgressBar1)とButtonコントロール(Button1)を貼り付け、Button1をクリックすると1秒おきにLabel1とProgressBar1の内容が変化する(1から10までカウントアップする)アプリケーションを作成します
DoEventsメソッドを使用した方法こちらに移動しました。 スレッド化による方法こちらに移動しました。 履歴:2005/9/11 マルチスレッドを使ったVB.NETのコードで、canceledがvolatileとなるように変更。2007/9/2 キャンセルした時にMessageBox.Showでエラーが出る不具合を修正。2010/10/24 「時間のかかる処理の進行状況を表示する」と統合。記事の内容をそちらに移す。(この記事は、「.NETプログラミング研究 第44号」で紹介したものを基にしています。) 注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。 .NET Tipsをご利用いただく際は、注意事項をお守りください。
Invokeメソッドを使う Form#InvokeもしくはControl#Invoke サンプル内容 処理開始とともにダイアログを表示 スレッドを10個作成 スレッドが全て終了後、ダイアログを閉じる サンプル using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using System.Windows.Forms; using System.Threading; namespace MultiThread { public partial class Form1 : Form { public static int count = 0; public static int max = 9; public delegate void Exec(int i
C#がメインで他もまぁ諸々なブログです おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`) つーかコメント欲しい(´・ω・`) 通常、Windowsアプリでは、イベントハンドラ内で重い処理を行う際は、フォームの一時的なハングを防ぐために重い処理を別スレッドで行う。 その時気をつけなければならないのが、コントロールの操作。コントロールは、コントロール ( の基になるウィンドウハンドル ) を所有しているスレッドで操作しなければならない。別スレッド内でそのままコントロールを操作してしまうと、正常に動作してくれない。 ( .NET 2.0から特に。 ) では、別スレッドで重い処理を行ったあと、どうやってコントロールを所有しているスレッドに処理を行わせるか?それには、Control.Invokeメソッドを使用する。Control.Invokeは、引数で受け取ったデリゲートオブジェクト
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く