我想把一个TextBox中的文字按照datatable中的文字顺序(rows0-rowsmax)每秒进行刷新,刷新不了,高手看看要怎么改。        private void btnDrawing_Click(object sender, RoutedEventArgs e)
        {
            BeginDrawText();
        }
 private void BeginDrawText()
        {
            stopFlag = false;
            Thread thread = new Thread(new
            ThreadStart(refreshText));
            thread.Start();  
        }        private delegate void DelegateDrawText();
        private bool stopFlag = false; private void refreshText()
        {
            while (!stopFlag)
            {
                //向UI界面更新显示 
                Dispatcher.Invoke(System.Windows.Threading.
                DispatcherPriority.SystemIdle,
                new DelegateDrawText
                (DrawText));
            }
        }
 private void DrawText()
        {
            String currentTime = System.
            DateTime.Now.ToString();
            txtDrawUser.Text = currentTime;
        }

解决方案 »

  1.   

    上面实现的是显示时间,我直接这样改了,不能显示 private void UserNameShow()
            {          
                if (dt.Rows.Count > 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        txtDrawUser.Text = dt.Rows[i][0].ToString() + "  " + dt.Rows[i][1].ToString();
                        
                        txtDrawUser.InvalidateArrange();                  
                        System.Threading.Thread.Sleep(1000);
                    }
                }
            }
      private void DrawText()
            {
                UserNameShow();
    }
      

  2.   

    没人回的,还是自己来算了,以下代码:
    具体方法是使用另一个线程将数据取出,使用代理将数据显示 private void btnDrawing_Click(object sender, RoutedEventArgs e)
            {
                getdata();
                BeginDrawText(); 
            }        private void button1_Click(object sender, RoutedEventArgs e)
            {
                stopFlag = true;
                DataFlag = true;
            }        /// <summary>
            /// 取得人员名单
            /// </summary>
            private void getdata()
            {
                getscnstr();
                string SqlStr = "SELECT Code,Name FROM DW_User";
                dt = acc.GetSereachData(scn, SqlStr);
            }
            /// <summary>
            /// 此方法为在线程内直接刷新UI,使TEXTBox刷新。//此方法无效
            /// </summary>
            private void UserNameShow()
            {          
                if (dt.Rows.Count > 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        txtDrawUser.Text = dt.Rows[i][0].ToString() + "  " + dt.Rows[i][1].ToString();                    
                        txtDrawUser.InvalidateArrange();                  
                        System.Threading.Thread.Sleep(200);
                    }
                }
            }        #region//使用委托显示TextBox的内容
            private void BeginDrawText()
            {
                stopFlag = false;
                Thread thread = new Thread(new
                ThreadStart(refreshText));
                thread.Start();  
            }        private delegate void DelegateDrawText();
            private bool stopFlag = false;
            private void refreshText()
            {
                while (!stopFlag)
                {
                    //向UI界面更新显示 
                    Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.SystemIdle,
                    new DelegateDrawText(DrawText));
                }
            }
            
            private void DrawText()
            {
            //    String currentTime = System.
            //        DateTime.Now.ToString();
            //    txtDrawUser.Text = currentTime;//此实例显示为当前时间            //UserNameShow();
                txtDrawUser.Text = drawtext;
            }
            #endregion
            /// <summary>
            /// /////////////////////////以下使用线程更新TextBox的数据,旨在得出TextBox在何时需要显示何数据
            /// </summary>        
            private bool DataFlag = false;
            private void refDataText()
            {
                DataFlag = false;
                Thread thread = new Thread(new
                ThreadStart(SetData));
                thread.Start();  
            }
            private void SetData()
            {
                while (!DataFlag)
                {
                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                drawtext = dt.Rows[i][0].ToString() + "  " + dt.Rows[i][1].ToString();                            
                                System.Threading.Thread.Sleep(300);
                            }       
                }
            }