【发布时间】:2015-10-17 04:30:03
【问题描述】:
我在 winform 中使用线程时有问题。 调试程序时出错。
我的应用程序在启动程序时抛出异常。
我定义class RunInUIThread是:
private void RunInUIThread(Delegate method)
{
this.BeginInvoke(method);
}
并且在 RunInUIThread 方法中像:
BaiXeBUS baixe = new BaiXeBUS();
RunInUIThread(new ThreadStart(delegate ()
{
BaiXeDTO obj = new BaiXeDTO(); //Map all to define database
txtKhuVucBai.Text = mReader.CurrentCardIDBlock1.ToString();
txtMaThe.Text = mReader.CurrentCardIDBlock2.ToString();
//If I comment all below code. It's work. But I need Insert data to database.
txtKhuVucBai.Text = obj.IDBaiXe.ToString();
txtMaThe.Text = obj.IDRF.ToString();
obj.BienSoXe = textBox1.Text;
obj.HinhBienSo = color.ToString();
obj.HinhChuXe = img.ToString();
obj.ThoiGianVao = DateTime.Now.ToLocalTime();
obj.ThoiGianRa = DateTime.Now.ToLocalTime();
baixe.BaiXe_Insert(obj); //Contain data access layer to insert data with store procedure.
}));
为什么我的代码不起作用。有人可以解释我以及如何解决问题? 感谢所有读者!!!
【问题讨论】:
-
暂时您可以从
ThreadStart中删除代码块并调试确切的问题所在。从不同的线程开始会使调试变得困难,因此如果可以直接从主 UI 线程运行它,那将是最好的。 -
看看:在消息框中查看详细信息。 UI 线程_:可能是同步上下文。
-
@JoelLegaspiEnriquez,感谢您的建议。评论此行时。我在下面发现错误评论。
-
你把这段代码放到表单构造函数中了吗?你能在这段代码运行之前看到表单吗?此错误通常表示尚未创建表单(您可以使用 this.IsHandleCreated 进行检查)。或者你已经关闭了表单并且线程结束了,尝试更新表单但是它被释放了。
标签: c# multithreading winforms exception unhandled-exception