質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

意見交換

クローズ

5回答

843閲覧

プログレスバー機能の導入について

tokotaku

総合スコア63

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2023/05/22 02:59

0

1

様々なソフトウェアに導入されているプログレスバーですが、あれは実際どのように実装されているのですか?
今まで使ったことが無く、調べても基本的なこと(毎秒ゲージが増えるだけとか)しか出てこなくて疑問に思いました。

仕組みはわかるんですが、実際に使用するとなるとよくわからないです・・・
ダウンロードなら総ファイル数から現在のパーセンテージを計算できますけど、
ファイルの送信や保存、画面のロードといったものはどうやって決められてるんですか?

メインで使用している言語はC++、C#、JavaScriptあたりです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答5

#1

maisumakun

総合スコア145183

投稿2023/05/22 03:24

ファイルの送信なら送信した量をとる手段もありますし、中には適当に出している例もあるようです。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

episteme

総合スコア16614

投稿2023/05/22 05:50

全体量 と 処理された量 の比に基づいてプログレス・バーを動かせばいいんだけど...
なにがわからんのですかね?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

yambejp

総合スコア114810

投稿2023/05/22 06:28

jsの場合、こんな感じでしょうか

  • ファイルの送信→ どうしてもやりたければ分割アップロードする
  • 保存→ jsで保存はただのダウンロード?(そもそもローカル→ロケールの保存でプログレスに頼るような処理はあまりかんがえられない)
  • 画面のロード → レンダリングの経過を予測するのはむずかしいがSPAならパートごとのロード状態をカウント

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

fana

総合スコア11656

投稿2023/05/22 09:59

編集2023/05/22 10:11

プログレスバーって,見せられる側の感覚としては「時間的な意味での進捗」(8分経過時点で80%表示になってたら→あと2分で終わるのかな,みたいな)を示していると捉える気がしますが,
実際にはそうでもなくて「99%まではさくっと進んで,それ以降ひたすら待たされる」みたいなのをわりとよく見かける気がします.

なので(?),実施する処理内容を{それらの所要時間とは無関係に,何らかの意味で}N個の小処理のシーケンスだとみなし,それらの小処理が完了する毎に表示を進める,みたいな使い方でも良いんじゃないかな,とか.

ただ,個人的にプログレスバーに期待する役割というのは,
相応に長くかかる処理に関して「コレ,止まっちゃってるんじゃねーの?」という疑惑を払拭することなので,
前記の「99%でずっと動かない」みたいなのは「意味ねーな」と思ってしまいます.
なので,自分で使う際には「ちょっとずつでも着実に進んでいることを示す」ようにこまめに更新するようにしています.

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#5

退会済みユーザー

退会済みユーザー

総合スコア0

投稿2023/05/23 01:09

当たり前の話ですが、プログレスバーを使って全体の何 % まで終了したかを表示するためには、何らかの方法で定期的にその時点での進捗状況を取得できる必要があります。

例えば、以下のようなプログレスバーのライブラリがありますが、それらは定期的に進捗状況を取得して全体の何 % まで終了したかの表示を更新するようにして使います。

C# (.NET のライブラリ)

ProgressBar クラス (WinForms 用)
https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.progressbar?view=netframework-4.8

ProgressBar クラス (WPF 用)
https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.controls.progressbar?view=netframework-4.8

実装例は以下の記事を見てください。

WPF/Windowsフォーム:時間のかかる処理をバックグラウンドで実行するには?
https://atmarkit.itmedia.co.jp/ait/articles/1512/02/news019.html

JavaScript (jQuery プラグイン)

Progressbar
https://jqueryui.com/progressbar/

実装例は以下の記事を見てください。

進捗状況の表示
http://surferonwww.info/BlogEngine/post/2015/12/28/show-progress-of-task-being-performed-at-server-side.aspx

なので、

ファイルの送信や保存、画面のロードといったものはどうやって決められてるんですか?

という場合、その処理中に定期的にその時点での進捗状況が取得できないとするとお手上げです。

そういう場合でも、処理の終わりは分かるケースがあると思いますので、進捗状況は適当に出しておいて、終わったら完了を通知するとかはできると思いますが。

ただ、そういう場合はプログレスバーで適当な数値を出すよりは、以下の画像のような表示の方が良さそうだと個人的には思います。

イメージ説明

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問