.NET winforms应用程序控件转为红色x

时间:2009-01-11 15:05:24

标签: c# .net

我已经将C#.net 2.0应用程序部署到Windows XP SP2计算机上,并且在某些事件期间,很多表单控件都转为红色X. (按钮,标签等......)。我粘贴了下面导致问题的程序之一。由于我无法在开发机器上重现它,我只能猜测问题是线程还是绘画。

 private void SearchExistingPeople()
        {
            try { if (_dal == null) { _dal = new DataAccessLayer(); } }
            catch (Exception ex) { throw new Exception("Error creating DataAccessLayer: " + ex.Message); }

            Thread oThread = new Thread(ShowPleaseWait);
            oThread.Start();

            try
            {
                PersonDS _dsPerson = _dal.SearchExistingPersons(dtbSearchDOB.Value, txtSearchFName.Text, txtSearchLName.Text, txtSearchSSN.Text, txtSearchAKA.Text, chkDOBSearch.Checked);
                dgvPeople.DataSource = _dsPerson;
                dgvPeople.DataMember = "People";

                dgvPeople.Columns["PersonID"].Visible = false;
            }
            catch (Exception ex)
            { MessageBox.Show("Error in SearchExistingPeople: " + ex.Message); }
            finally
            { 
                if (_dal != null) { _dal = null; }
                oThread.Abort();
                oThread = null;
            }
        }

2 个答案:

答案 0 :(得分:1)

当您从另一个线程访问UI控件而不是UI线程时,红色十字通常由.NET框架本身绘制。

也许在ShowPleaseWait或SearchExistingPersons中有一个跨线程调用。 (请发布这些例程的代码。)

当资源不可用时,也会显示十字。

答案 1 :(得分:0)

在黑暗中拍摄。 ShowPleaseWait如何工作?它是否尝试触摸当前显示的任何控件?如果是这样,这就是你问题的根源。从后台线程使用控件是不合法的。

测试它的一种快速而肮脏的方法是使用基本上空方法而不是ShowPleaseWait。