C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: DLLの起動について(C#)


(過去ログ 12 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■3442 / inTopicNo.1)  DLLの起動について(C#)
  
□投稿者/ ヒナ (1回)-(2007/05/10(Thu) 16:11:23)

分類:[C# (Windows)] 

初めまして、ヒナです。

windowsアプリケーションで開発したメニュー画面より

DLLを起動させるプログラムを作成したのですが、

起動したDLLが重い処理の為、起動元のメニュー画面

が固まった状態になってします。

この固まった画面の状態を回避する方法があったらと思い

投稿させて頂きました。

何かいい方法はあるのでしょうか? よろしくお願いします。

開発環境 C# 2005
引用返信 編集キー/
■3443 / inTopicNo.2)  Re[1]: DLLの起動について(C#)
□投稿者/ 魔界の仮面弁士 (273回)-(2007/05/10(Thu) 16:20:17)
No3442 (ヒナ さん) に返信
> DLLを起動させるプログラムを作成したのですが、
> 起動したDLLが重い処理の為、起動元のメニュー画面
> が固まった状態になってします。

『DLL を起動させる』というのが、どういう処理なのかわかりませんが、
BackgroundWorker を使って起動してみては如何でしょう。
引用返信 編集キー/
■3448 / inTopicNo.3)  Re[2]: DLLの起動について(C#)
□投稿者/ ヒナ (2回)-(2007/05/10(Thu) 17:16:36)
ヒナです、魔界の仮面弁士さん回答ありがとうございます。

> 『DLL を起動させる』というのが、どういう処理なのかわかりませんが、
windowsアプリケーションで作成したメニュー画面のソリューションより
DLLを参照設定。このDLLと言うのは帳票を作成するDLLです。

> BackgroundWorker を使って起動してみては如何でしょう。
BackgroundWorkerについて調べてみたのですが、
参照したDLLをBackgroundWorkerで起動することができるのかどうか
分かりませんでした。
参照したDLLをBackgroundWorkerで起動することは可能なのでしょうか?よろしくお願いします。

引用返信 編集キー/
■3457 / inTopicNo.4)  Re[3]: DLLの起動について(C#)
□投稿者/ はつね (157回)-(2007/05/10(Thu) 18:28:29)
はつね さんの Web サイト
No3448 (ヒナ さん) に返信
> windowsアプリケーションで作成したメニュー画面のソリューションより
> DLLを参照設定。このDLLと言うのは帳票を作成するDLLです。

帳票を作成するDLLとの事ですが、帳票を作成状況を表示するようなUIは実装しないのでしょうか。
重たい処理=長時間かかる処理だとすれば、進行状況を表示するようなUIなDLLにするのも一案です。
もちろんBackgroudWorker等を使って、帳票作成中も別作業を行うような実現方法もあります。

引用返信 編集キー/
■3458 / inTopicNo.5)  Re[4]: DLLの起動について(C#)
□投稿者/ ヒナ (3回)-(2007/05/10(Thu) 19:47:04)
ヒナです、はつねさん回答ありがとうございました。

> 帳票を作成するDLLとの事ですが、帳票を作成状況を表示するようなUIは実装しないのでしょうか。
実装していません。帳票を作成するDLL側でUIを実装しないで、起動元の
方で画面が固まらないようにする方法を探しています。

> もちろんBackgroudWorker等を使って、帳票作成中も別作業を行うような実現方法もあります。
BackgroudWorkerの説明を読んだのですが、BackgroudWorkerを使って参照したDLLを起動させる
やり方が分かりませんでした。(起動もとのプログラム内でBackgroudWorkerを使って処理するやり方はなんとか理解しましたが・・・)

やり方のヒントがありましたら、よろしくお願いします。
引用返信 編集キー/
■3459 / inTopicNo.6)  Re[3]: DLLの起動について(C#)
□投稿者/ 魔界の仮面弁士 (274回)-(2007/05/10(Thu) 19:59:05)
2007/05/10(Thu) 20:06:52 編集(投稿者)

No3448 (ヒナ さん) に返信
> 参照したDLLをBackgroundWorkerで起動することは可能なのでしょうか?
と言われましても、こちらはその DLL の仕様を知らないので……。

> よろしくお願いします。
コードの概念だけでいえば、こんな感じかな。

<修正前>
=========================================================
void button1_Click(…)
{
 // Print メソッドの処理が長いと、処理完了までの間、画面が固まってしまう。
 bool successed = 帳票クラス.Print(パラメータ);
 if(successed)
 …
}
=========================================================
  ↓
  ↓ BackgroundWorker を使った非同期処理に書きかえる場合
  ↓
<修正後>
=========================================================
void button1_Click(…)
{
 // RunWorkerAsync で、バックグラウンド処理の開始を指示する。
 // 下記の行を呼び出したあとも、画面は引き続き利用可能。
 backgroundWorker1.RunWorkerAsync(パラメータ);
}

void backgroundWorker1_DoWork(…)
{
 // DoWork イベント内に、実際の処理を記述する。
 // この中で長い処理を行っても、画面側には影響を与えないというのが利点。
 e.Result = 帳票クラス.Print(e.Argument);

 // なお、この中からフォーム上のコントロールなどを直接操作するのは NG です。
}

void backgroundWorker1_RunWorkerCompleted(…)
{
 // RunWorkerCompleted イベント内に、処理完了後の記述を行う。
 bool successed = (bool)e.Result;
 if(successed)
 …
}
=========================================================

ちなみに、処理の進捗状況を表示したい場合などは、ProgressChanged イベントを併用します。
(DoWork 中に ReportProgress メソッドを適宜呼び出すと、ProgressChanged に状況が通知されます)
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/BackgroundWorker/
引用返信 編集キー/
■3460 / inTopicNo.7)  Re[5]: DLLの起動について(C#)
□投稿者/ ヒナ (4回)-(2007/05/10(Thu) 20:43:45)
ヒナです、魔界の仮面弁士さん回答ありがとうございます。

分かりやすい例で、私が作りたかったものそのものでした。

BackgroundWorker というコンポーネントも知り勉強できました。

ありがとうござました。


改めて、はつねさん、魔界の仮面弁士さん回答ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -