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

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

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

Re[3]: フォームの再描写について


(過去ログ 104 を表示中)

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

■61955 / inTopicNo.1)  フォームの再描写について
  
□投稿者/ 巴 (13回)-(2011/09/13(Tue) 13:06:58)

分類:[C#] 

いつもお世話になっています。

言語はC#、ソフトはVisualStudio2005を使っています。

フォーム上にPictureBoxを配置して、その中にgifファイルを配置します。
実行するとフォーム上でgifファイルのアニメーションが再生されているのですが、処理に時間がかかる動作(私が今作成しているのはファイルのコピーツールです)をさせるとその間gifのアニメーションが止まってしまいます。

コピー処理の手前と最後にRefreshを使ってもダメでした。

gifなどの連続している画像はどうやっても処理中は止まってしまうものなのでしょうか。
解決策が分かる方がいらっしゃいましたらお願いいたします。
引用返信 編集キー/
■61956 / inTopicNo.2)  Re[1]: フォームの再描写について
□投稿者/ マサヤ (339回)-(2011/09/13(Tue) 13:22:40)
並列処理のお話でしょうか?
引用返信 編集キー/
■61957 / inTopicNo.3)  Re[2]: フォームの再描写について
□投稿者/ 巴 (15回)-(2011/09/13(Tue) 13:25:10)
No61956 (マサヤ さん) に返信
> 並列処理のお話でしょうか?

そうなるのでしょうか?
方法はどうであれgifアニメーションを停止させたくないんですよね。
引用返信 編集キー/
■61958 / inTopicNo.4)  Re[1]: フォームの再描写について
□投稿者/ shu (988回)-(2011/09/13(Tue) 13:27:54)
No61955 (巴 さん) に返信

時間の掛かる処理をBackgroundWorker で行うとか。
引用返信 編集キー/
■61959 / inTopicNo.5)  Re[2]: フォームの再描写について
□投稿者/ マサヤ (340回)-(2011/09/13(Tue) 13:50:01)
shuさんの方法に賛成です。

仕様としては、ファイルコピーをしながら、他の作業をしても問題ないのでしょうか?
ファイルコピーが終了するまで待つ必要性があるのでしたら、プログレスバー等が必要になるかと。
その場合、プログレスバーでpictureBoxの部分を隠す、とかできます。
引用返信 編集キー/
■61960 / inTopicNo.6)  Re[2]: フォームの再描写について
□投稿者/ 巴 (16回)-(2011/09/13(Tue) 14:06:11)
No61958 (shu さん) に返信
No61958 (マサヤ さん) に返信

お二方とも書き込みありがとうございます。

BackgroundWorker…初めて耳にしました。

私が作成しているのは社内のみで使うお役立ちツールのようなもので、手持ちのファイルを選択し、複雑な場所にコピーするだけのツールです。
コピー作業を開始するまでは静止画を表示して、コピー作業中は長くなるので、その間はgifアニメを再生して「作業中なんですよ」というのを伝えようとしてたんです。

そのまま表示するPictureBoxを切り替えただけでは止まってしまっていたのでここに書き込んだ次第です。

簡単な動作でテストしたところ、gifアニメが止まることなく動作することを確認しました。
使ったことのないものなのでちょっと慣れるのに時間がかかりそうですが、活用してみようと思います。

お二方ともありがとうございました。
解決済み
引用返信 編集キー/
■61962 / inTopicNo.7)  Re[3]: フォームの再描写について
□投稿者/ マサヤ (341回)-(2011/09/13(Tue) 14:26:44)
2011/09/13(Tue) 14:26:57 編集(投稿者)

蛇足になりますが、Threadでやるのもいいですよ。
時間計測の例になります。
delegate string ThreadMethod();
static ThreadMethod threadMethod;
public Form1()
{
threadMethod = new ThreadMethod(ThreadMethodA);
threadMethod.BeginInvoke( new AsyncCallback(MyCall),DateTime.Now);
InitializeComponent();
pictureBox1.Image = System.Drawing.Image.FromFile(@"***.gif");
}
private static string ThreadMethodA()
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
for (int i = 0; i < 30; i++)
{
System.Threading.Thread.Sleep(100);
}
return sw.Elapsed.ToString();
}
private static void MyCall(IAsyncResult iar)
{
string res = threadMethod.EndInvoke(iar);
string begin = iar.AsyncState.ToString();
MessageBox.Show("結果:" + res + " / 始め:" + begin);
}
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -