
[英]System.InvalidOperationException: Value Dispose() cannot be called while doing CreateHandle()
[英]Value Dispose() cannot be called while doing CreateHandle() Error when Using Thread
//这是我的代码
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按钮时,它没有错误,但在我第二次尝试时,它会出错
在执行CreateHandle()
时无法调用Value Dispose()
CreateHandle()
。 在Designer.cs
但是当我没有使用Thread时,我多次单击btnGenSumm
按钮时没有错误。
无论您目前遇到的具体问题如何,此代码都从根本上被打破。
您不能操纵任何线程上的UI元素,而是主UI线程。 两个后台线程都执行与UI元素直接交互的代码(例如,表单上的控件),就像它在主UI线程上运行一样。 那不行。
更改代码以改为使用BackgroundWorker组件。 这比替代方案更优雅地处理UI元素的跨线程访问。 链接的MSDN文档包含示例代码,您可以通过使用方便的dandy搜索功能在Stack Overflow上找到关于它的大量其他问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.