none
progressBar 與 查詢同時... RRS feed

  • 問題

  • 我使用的是c#裡的pocket pc

     

    由於我有資料需要從  datagrid 裡取出來

     

    而我怕使用者不知pda是否有在跑

     

    我想用progressBar

     

    顯示目前跑的速度

     

    讓使用者可以觀看

     

    而我的要查詢顯示的 datagrid程式如下

     

    Code Snippet

    string ConnString;
                ConnString = @"Data Source =\Storage Card\Microsoft SQL Server 2005 Mobile Edition\Device\Mobile\v3.0\DB.sdf;";
                ConnString = ConnString + " Pwd ='fivetiger';encrypt database =TRUE"; //encrypt資料庫加密

                SqlCeConnection conn = new SqlCeConnection(ConnString);
                conn.Open(); //開啟資料庫

               

                string a = DateTime.Now.ToLongDateString();
                zlabel1.Text = a;

                string selectCmd1 = "select aaa as 姓名,bbb as 次數  from total where todaydate='" + a + "' ";

                SqlCeDataAdapter da = new SqlCeDataAdapter(selectCmd1, conn);
                DataSet ds = new DataSet();
                da.Fill(ds, "total");
                zdataGrid9.DataSource = ds.Tables["total"];

                conn.Close();
                da.Dispose();

     

     

    而我也把progressBar的跑的程式寫完

       

    Code Snippet

         private void timer1_Tick(object sender, EventArgs e)
            {
                if (progressBar1.Value < 100)
                {
                    progressBar1.Value = progressBar1.Value + 1;
                    label1.Text = progressBar1.Value.ToString() + "%";
                }
                else
                {
                    timer1.Enabled = false;
                    DialogResult dr = MessageBox.Show("執行完畢%,檔案搜詢完畢!!", "訊息");
                    if (dr == DialogResult.OK)
                    {
                        progressBar1.Value = 0;
                        label1.Text = "0%";
                    }

                }
             
            }

     

     

     

    而有兩個

     timer1.Interval = 100;
     timer1.Enabled = true;

     

    我原本是將他放在圖上的第一個程式string ConnString; 的上方,也就是他的前面

     

     

    但我執行後,他們是獨立的個體

     

    都是datagrid跑完了,然後 才出現progressBar開始跑進度

     

    而我要的 是按了查詢鍵後,開始找資料,同時progressBara也開始跑,跑完100%後datagrid就顯示出來!

     

    請問我該如何修改呢?

    2007年9月11日 上午 07:51

所有回覆

  • 你要自己實作多執行緒處理,因為 PDA 中沒有 BackgroundWorker 這樣的元件可以用。

     

    可參考:http://msdn2.microsoft.com/en-us/library/aa446540.aspx

     

     

    2007年9月11日 上午 08:05
    版主
  • hi,小朱

     

    我 分別把我以上的兩個程式都用成function

     

    然後

     

    我在我的查詢按紐那按了

    寫了

     

    分別執行兩個function的指令

     

    但pda出現的結果是

     

    由於找不到包含錯誤訊息的選擇性源組件,因此無法顯示錯誤訊息

     

    microsoft.AGL.Common.MISC.HandleAr()

     

    system.windows.forms.progressbar._getinfo()

    system.windows.forms.progressbar.get_value()

    deviceapplication1.form1.aaa  =>aaa是我給(我發問的那篇文章)的第二個 就是progress的那個程式 

     

    以上是pda 出現的錯誤

     

    而我也try catch來抓

     

    但也是顯示同樣的結果

     

     

    請問,我該如何做呢?

    2007年9月12日 上午 05:36
  • 1. 用 Debug 模式來編譯。

    2. 程式碼咧?要叫我們猜嗎?

    2007年9月12日 上午 05:40
    版主
  • hi ,小朱

     

    我宣告了aaa

    Code Snippet

    public void aaa()

    {

    if (progressBar1.Value < 100)
                {
                    progressBar1.Value = progressBar1.Value + 1;
                    label1.Text = progressBar1.Value.ToString() + "%";
                }
                else
                {
                    timer1.Enabled = false;
                    DialogResult dr = MessageBox.Show("執行完畢%,檔案搜詢完畢!!", "訊息");
                    if (dr == DialogResult.OK)
                    {
                        progressBar1.Value = 0;
                        label1.Text = "0%";
                    }
    }

    }

     

     

    和bbb

    Code Snippet

    public void bbb()

    {

    zpanel3.Visible = true;


    string ConnString;
    ConnString = @"Data Source =\Storage Card\Microsoft SQL Server 2005 Mobile\Edition\Device\Mobile\v3.0\Database.sdf;";
    ConnString = ConnString + " Pwd ='fivetiger';encrypt database =TRUE";             SqlCeConnection conn = new SqlCeConnection(ConnString);
                conn.Open();

    string a = DateTime.Now.ToLongDateString();
    zlabel1.Text = a;

    string selectCmd1 = "select t_name as 姓名,t_green  as 上果嶺成功率,t_fairway as 上球道成功率,t_water as 下水次數,t_bunker as 下沙坑次數,t_pole as 總桿數  from total where t_todaydate='" + a + "' ";

    SqlCeDataAdapter da = new SqlCeDataAdapter(selectCmd1, conn);
    DataSet ds = new DataSet();
    da.Fill(ds, "total");
    zdataGrid9.DataSource = ds.Tables["total"];

    conn.Close();
    da.Dispose();

     

     

    然後 我在button那

     

    Code Snippet

     timer1.Enabled = true;
     timer1.Interval = 100;

     


                ThreadStart starter = new ThreadStart(this.aaa);
                Thread t = new Thread(starter);
                t.Start();

                ThreadStart starter2 = new ThreadStart(this.bbb);

                Thread t2 = new Thread(starter2);
                t2.Start();

     

     

     

    請問,是這樣子寫的嘛?

     

    我該如何更改呢?

     

    謝謝你!

    2007年9月12日 上午 08:44