//这是我的代码
private void btnGenSumm_Click(object sender, EventArgs e)
{
Thread t1 = new Thread(new ThreadStart(loadSummSales));
Thread t2 = new Thread(new ThreadStart(showWaitMessage));
t1.Start();
t2.Start();
}
private void showWaitMessage()
{
label1.Text = "Processing please wait!";
}
private void loadSummSales()
{
try
{
sqlConn = new SqlConnection(MyClass.GlobalConn());
string cmdStr = "[dbo].[GetSummary]";
sqlConn.Open();
SqlCommand cmd = new SqlCommand(cmdStr, sqlConn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@piDateFrom", SqlDbType.Int).Value = Convert.ToInt32(FromD);
cmd.Parameters.Add("@piDateThru", SqlDbType.Int).Value = Convert.ToInt32(ToD);
System.Data.DataTable dT = new System.Data.DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dT);
cmd.ExecuteNonQuery();
dgSummSales.DataSource = dT;
dgSummSales.Columns["Branch"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgSummSales.Columns["Product Amt"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dgSummSales.Columns["SERVICE Amt"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dgSummSales.Columns["Branch"].Width = 270;
dgSummSales.Columns["Product Amt"].Width = 98;
dgSummSales.Columns["SERVICE Amt"].Width = 103;
dgSummSales.Columns["Product Amt"].DefaultCellStyle.Format = "N2";
dgSummSales.Columns["SERVICE Amt"].DefaultCellStyle.Format = "N2";
dgSummSales.RowsDefaultCellStyle.BackColor = Color.White;
dgSummSales.AlternatingRowsDefaultCellStyle.BackColor = Color.Aquamarine;
dgSummSales.Refresh();
label1.Text = "Sales as of " + dateTimePicker2.Value.ToString("d", System.Globalization.CultureInfo.GetCultureInfo("en-US"));
}
//在我第一次点击btnGenSumm按钮时,它没有错误,但在我第二次尝试时,它会出错
执行Dispose()
时无法调用值CreateHandle()
。在Designer.cs
上
但是当我没有使用Thread时,我多次单击btnGenSumm
按钮时没有错误。
答案 0 :(得分:2)
无论您目前遇到的具体问题如何,此代码都会被彻底打破。
您不能在任何线程上操纵UI元素,而是主UI线程。两个后台线程都执行直接与UI元素(例如,表单上的控件)交互的代码,就像它在主UI线程上运行一样。那不行。
更改代码以改为使用BackgroundWorker组件。这比替代方案更优雅地处理UI元素的跨线程访问。链接的MSDN文档包含示例代码,您可以通过使用方便的dandy搜索功能在Stack Overflow上找到大量其他问题。