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

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

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

Re[2]: プログレスバーを動かしながら処理をする方法


(過去ログ 91 を表示中)

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

■54187 / inTopicNo.1)  プログレスバーを動かしながら処理をする方法
  
□投稿者/ 裕猫 (186回)-(2010/10/08(Fri) 11:52:26)

分類:[C#] 

WindowsXP SP3
VisualStudio2008 C#の環境です。
 データのバックアップや繰り越しといった動作でメニューからバックアッププログラムをprocess.start()で起動します。起動するプログラムはwindowsフォームプログラムでボタンはなくラベルが一つとプログレスバーが一つあるだけで、フォームを表示してそのまま繰り越し処理をして終わればすぐに終了するのですが、プログラム実行中にformがちゃんと表示されませんでしたので下記のように作り直したら、フォームは出るのですが、処理が始まるとプログレスバーが止まってしまいます。
proccess.start()で呼び出したプログラムが処理を実行する間、formを表示して、formの中にあるプログレスバーを動かしていたいのですがどうしたらプログレスバーを動かしながら処理をできるようになるでしょう? アドバイスお願いいたします。

program.csに
namespace 繰越
{
    static class Program
    {
        /// <summary>
        /// アプリケーションのメイン エントリ ポイントです。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            using (Form1 frm = new Form1())
            {
                string RD;
                frm.Show();
                MessageBox.Show("開始");
                RD = CDBA.DBF("得意先", "得意先 > ' '", "得意先 ASC", MKST.SM40OLD, MKST.SM40T);
                while (true)
                {
                    if (RD != null) { break; }
                    Array.Copy(MKST.SM40OLD, MKST.SM40NEW, MKST.SM40T);
                    for (int CT1 = 41; CT1 > 39; CT1--) { MKST.SM40NEW[CT1] = MKST.SM40OLD[CT1 - 1]; }
                    long TT = 0;
                    for (int CT2 = 27; CT2 < 39; CT2++) { TT = TT + Convert.ToInt64(MKST.SM40OLD[CT2]); }
                    MKST.SM40NEW[39] = TT;
                    for (int CT3 = 15; CT3 < 27; CT3++) { MKST.SM40NEW[CT3 + 12] = MKST.SM40OLD[CT3]; MKST.SM40NEW[CT3] = 0; }

                    RD = CDBA.DBU("得意先", "得意先 = '" + MKST.SM40OLD[0].ToString() + "'", MKST.SM40NEW, MKST.SM40F, MKST.SM40M,
                        MKST.SM40T);
                    if (RD != null) { MessageBox.Show("更新に失敗しました。"); }

                    RD = CDBA.DBF("得意先", "得意先 > '" + MKST.SM40OLD[0].ToString() + "'", "得意先 ASC", MKST.SM40OLD, MKST.SM40T);
                }


                frm.Close();
            }
        }
    }
}

form1に
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 繰越
{
    public partial class Form1 : Form
    {
        public static string RD;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Activated(object sender, EventArgs e)
        {
            progressBar1.Style = ProgressBarStyle.Marquee;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.ForeColor = Color.White;
            label1.BackColor = Color.Black;
            label2.ForeColor = Color.Black;
            label2.BackColor = Color.GhostWhite;
            this.BackColor = Color.GhostWhite;
        }
    }
}

引用返信 編集キー/
■54188 / inTopicNo.2)  Re[1]: プログレスバーを動かしながら処理をする方法
□投稿者/ Hongliang (733回)-(2010/10/08(Fri) 12:13:25)
メインスレッドでループしてたら、その間描画を行えません。
BackgroundWorker など使って、別スレッドで処理するようにして下さい。

// Application.Run しないのはどうして?
引用返信 編集キー/
■54192 / inTopicNo.3)  Re[2]: プログレスバーを動かしながら処理をする方法
□投稿者/ 裕猫 (187回)-(2010/10/08(Fri) 12:58:31)
No54188 (Hongliang さん) に返信
> メインスレッドでループしてたら、その間描画を行えません。
> BackgroundWorker など使って、別スレッドで処理するようにして下さい。
返信ありがとうございます。早速やってみます。

> // Application.Run しないのはどうして?
最初はそうしてたんですけど、formがちゃんと表示されないので、いろいろ調べていたらゲームを作るプログラムでこういうような使い方をしていたのでそれを参考に作ってみたものです。
引用返信 編集キー/
■54193 / inTopicNo.4)  Re[3]: プログレスバーを動かしながら処理をする方法
□投稿者/ マサヤ (166回)-(2010/10/08(Fri) 13:05:30)
プログレスバーを同期、非同期のどちらで使用するのかをまず決めたほうがいいかと。
おそらく非同期を選ばれると思います。
Invokeで調べてみてください。
引用返信 編集キー/
■54195 / inTopicNo.5)  Re[4]: プログレスバーを動かしながら処理をする方法
□投稿者/ 裕猫 (188回)-(2010/10/08(Fri) 14:25:40)
No54193 (マサヤ さん) に返信
> プログレスバーを同期、非同期のどちらで使用するのかをまず決めたほうがいいかと。
> おそらく非同期を選ばれると思います。
> Invokeで調べてみてください。
ありがとうございます。調べてみます。
引用返信 編集キー/
■54196 / inTopicNo.6)  Re[2]: プログレスバーを動かしながら処理をする方法
□投稿者/ 裕猫 (189回)-(2010/10/08(Fri) 14:27:36)
No54188 (Hongliang さん) に返信
> メインスレッドでループしてたら、その間描画を行えません。
> BackgroundWorker など使って、別スレッドで処理するようにして下さい。
試してみました。BackgroundWorker使うのは初めてでしたので調べていて手間取りましたが無事目的の動作をさせることができました。ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -