連載 .NETでWindowsアプリを作ろう第3回 画像検索ツール本体をマルチスレッドで作ろうデジタルアドバンテージ 遠藤 孝信2005/10/29 |
|
Back Issue
|
||||
|
本連載では「Web画像検索ツール」を作りながら、.NETによるWindowsアプリケーションのプログラミングについて解説しています。
連載第1回では、Googleイメージ検索で検索を行い、見つかった画像のURLを取得する「Google用プラグイン」を作成しました。また、第2回では、検索により取得した画像を一覧表示するための「サムネイル画像コントロール」を作成しました。
今回は、これらの2つのコンポーネントを使用するアプリケーション本体を作成していきます。アプリケーション本体では、ユーザーが入力した検索キーワードを受け取り、Google用プラグインでGoogleを検索し、検索結果のURLで示される画像をダウンロードしてから、サムネイル画像コントロールに追加していきます。
今回作成するWeb画像検索ツールの実行画面 |
今回はGoogle検索専用として、このアプリケーションを作成する。次回ではプラグインを選択して複数のサイトから検索を行えるようにする。 |
今回のポイントとなるのは、マルチスレッドによりGUI操作と検索処理を並行して行うところです。
マルチスレッドを利用せずにストレートにコーディングしてしまうと、検索を開始してからすべての検索結果を取得するまでの間はアプリケーションが操作できなくなってしまいます。これは、アプリケーションが検索処理にかかりきりになり、検索処理中はGUI部品であるボタンやスクロールバーの処理が実行されないためです。Googleによる検索がいくら速いといってもこれでは不便です。
今回は、以下の処理を別スレッドで実行するようプログラミングしていきます。
- Google用プラグインによる検索
- サムネイル画像のダウンロード
- サムネイル画像コントロールへのサムネイル画像の追加
本稿では、これらの処理を行うスレッドを「検索スレッド」と呼ぶことにします。これに対して、本来のスレッド*を「UIスレッド」と呼びます。画像の検索中は検索スレッドとUIスレッドが並行して実行されることになります。
* Windowsでは、すべての処理はスレッドとして実行されます。1つのアプリケーションは少なくとも1つのスレッドを持つことになります。 |
プロジェクトの設定
プログラミングを開始する前に、アプリケーションのプロジェクトを設定しておく必要があります。ここではプロジェクトの参照設定と、サムネイル画像コントロールの登録を行います。
まずは、連載第1回目で作成した「今回作成する3つのプロジェクト(Google検索部分)」(C#版、VB.NET版)を展開してください。zipファイルには次の3つのフォルダが含まれています。
- WebImageLib(ビルドするとWebImageLib.dllが作成される)
- WebImageSearch(ビルドするとWebImageSearch.exeが作成される)
- WISGoogle(ビルドするとWISGoogle.dllが作成される)
WebImageSearchフォルダを開いて、ソリューション・ファイルである「WebImageSearch.sln」をダブルクリックしVisual Studio .NET(以下、VS.NET)を起動します。以下のような画面のVS.NETが立ち上がるはずです。
VS.NETでWebImageSearch.slnを開いたところ(C#版) |
ソリューションには、アプリケーション本体用のプロジェクトであるWebImageSearchプロジェクトと、インターフェイスを定義したWebImageLibプロジェクトが含まれている。 |
連載第1回目ではアプリケーション本体用のプロジェクトを作成し、WebImageLibプロジェクトを追加しました。WebImageLibプロジェクトは、共通となるインターフェイスを定義しているモジュールです。
■Google用プラグイン・プロジェクトの追加
ここでは次に、Google用プラグインの実装を含んでいるWISGoogleプロジェクトをこのソリューションに追加していきます。
第1回目で解説しているように、WISGoogleプロジェクトを単体でビルドするとWISGoogle.dllが出来上がります。最終的にはこれをアプリケーション本体の実行ファイルと同じフォルダに置いておけば、アプリケーションの起動時に動的にロードして利用するようにする予定です。しかしこのようなプラグインとしての仕組みは次回で解説するとして、今回は単純化のためにWISGoogle.dllを静的にリンクして、Google専用のアプリケーションをまず作成していきます。
このため、ソリューション・エクスプローラで[ソリューション'WebImageSearch'(2プロジェクト)]部分を右クリックし、[追加]−[既存のプロジェクト]で、WISGoogleフォルダのプロジェクト(WISGoogle.csproj)をソリューションに追加します。
ソリューションへのWISGoogleプロジェクトの追加 |
ソリューション・エクスプローラで[ソリューション'WebImageSearch'(2プロジェクト)]部分を右クリックし、[追加]−[既存のプロジェクト]を実行して、WISGoogleフォルダのプロジェクト(WISGoogle.csproj)をソリューションに追加する。 |
■2つのプロジェクトへの参照の追加
さらに、アプリケーション本体のビルド時にWebImageLibプロジェクトとWISGoogleプロジェクトが自動的に参照されるように、WebImageSearchプロジェクトからこれら2つのプロジェクトへの参照を追加します。
これには、まずソリューション・エクスプローラで[WebImageSearch]部分を右クリックして[参照の追加]を実行し、以下の[参照の追加]ダイアログを開きます。
プロジェクトの参照の追加 |
ソリューション・エクスプローラで[WebImageSearch]部分を右クリックして[参照の追加]を実行し、このダイアログを開く。ここでは[プロジェクト]タブを開き、WebImageLibプロジェクトとWISGoogleプロジェクトを選択する。 |
この[参照の追加]ダイアログでは、[プロジェクト]タブを開き、WebImageLibプロジェクトとWISGoogleプロジェクトの両方を選択して[OK]ボタンを押します。これでWebImageSearchプロジェクトは、ほかの2つのプロジェクトを参照するようになります。
ここでいったんソリューションのビルドを行ってください。これによりWebImageSearchフォルダには「bin\Debugディレクトリ」が作成されて、そこにはWebImageSearch.exe、WebImageLib.dll、WISGoogle.dllの3つが作成されているはずです。
■Google用プラグインのテスト
ここで、アプリケーション本体からGoogle用プラグインが正しく使用できるかをテストしておきましょう。
まずWebImageSearchプロジェクトに含まれるForm.csのコードを開き、その冒頭部分に次の2行を追加します。
|
||
コンポーネントの名前空間の参照(上:C#、下:VB.NET) | ||
「WebImageLib」はWebImageLibプロジェクトに含まれるクラスやインターフェイスの名前空間。「WISGoogle」はWISGoogleプロジェクトに含まれるクラスの名前空間。 |
次にデザイン画面でフォームをダブルクリックし、以下のようなテスト・コードを書き込みます。
|
||
プロジェクトの設定をテストするためのコード(上:C#、下:VB.NET) | ||
GoogleImageクラスを使用するこれらのコードの詳細については連載第1回目で解説している。 |
実行してVS.NETの[出力]ウィンドウにサムネイル画像のURLが表示されればOKです。
上記コードの実行例 |
VS.NETの[出力]ウィンドウにGoogleにあるサムネイル画像のURLが表示される。 |
INDEX | ||
.NETでWindowsアプリを作ろう | ||
第3回 画像検索ツール本体をマルチスレッドで作ろう | ||
1.Google用プラグイン・プロジェクトの追加とテスト | ||
2.サムネイル画像コントロールの登録とテスト | ||
3.アプリケーションの画面設計とコーディング | ||
4.マルチスレッドによる検索処理 | ||
「.NETでWindowsアプリを作ろう 」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|