我已经将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;
}
}
答案 0 :(得分:1)
当您从另一个线程访问UI控件而不是UI线程时,红色十字通常由.NET框架本身绘制。
也许在ShowPleaseWait或SearchExistingPersons中有一个跨线程调用。 (请发布这些例程的代码。)
当资源不可用时,也会显示十字。
答案 1 :(得分:0)
在黑暗中拍摄。 ShowPleaseWait如何工作?它是否尝试触摸当前显示的任何控件?如果是这样,这就是你问题的根源。从后台线程使用控件是不合法的。
测试它的一种快速而肮脏的方法是使用基本上空方法而不是ShowPleaseWait。