报错:Exception handled in FpSpread.WndProc

zl194 2010-06-11 10:51:03
我使用线程提取数据并绑定DataGridView对象。就报上面的错误,如果不用线程直接绑定就不报错,但调用数据的时间较长,我希望使用线程,大家帮我分析分析错误和解决方法吧!

//主程序
ThreadStart tr_star = new ThreadStart(initpage); //将处理程序(费时间的)放到单独的进程中
Thread myThread = new Thread(tr_star);
myThread.Name = "r701yxml";
myThread.Start();//开始进程

private void initpage() //初始化页面
{

ClassMyData.DbSystem db = new ClassMyData.DbSystem();
dt = db.GetDataTable(sql);//取得DataTable对象,这个步骤肯定没问题。
drv1.DataSource = dt;
}



...全文
874 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zl194 2010-06-11
  • 打赏
  • 举报
回复
谢谢,我研究研究。
皇城龙三 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zl194 的回复:]
其实没有任何错误,如果把dt放在外面赋值也不会报错。是不是因为dt赋值时间太长了。
[/Quote]

有可能是DataGridView的耗时操作,操作仍然是主线程完成的,导致主线程处于假死状态。
t20100504t 2010-06-11
  • 打赏
  • 举报
回复
学习,帮顶!!!
zlkingdom 2010-06-11
  • 打赏
  • 举报
回复
在C#中的线程中是不建议直接操作控件的,因为这样不是线程安全的.
要使用委托来进行访问,给你一个例子:
1. 声明一个delegate和定义一个delegate的实现函数
delegate void ShowProgressDelegate(int newPos);
private void ShowProgress(int newPos)
{
// 判断是否在线程中访问
if (!_progressBar.InvokeRequired)
{
// 不是的话直接操作控件
_progressBar.Value = newPos;
}
else
{
// 是的话启用delegate访问
ShowProgressDelegate showProgress = new ShowProgressDelegate(ShowProgress);
// 如使用Invoke会等到函数调用结束,而BeginInvoke不会等待直接往后走
this.BeginInvoke(showProgress, new object[] { newPos });
}
}

2. 定义线程函数(在另一个线程中可以对界面控件进读操作)
private void ProgressStart()
{
while (true)
{
int newPos = _progressBar.Value + 10;

if (newPos > _progressBar.Maximum)
{
newPos = _progressBar.Minimum;
}
Trace.WriteLine(string.Format("Pos: {0}", newPos));

// 这里直接调用方法,由其内部自动判断是否启用delegate
ShowProgress(newPos);
Thread.Sleep(100);
}
}

3. 线程的启动和终止
private Thread _progressThread;
_progressThread = new Thread(new ThreadStart(ProgressStart));
// 可选,功用:即使该线程不结束,进程也可以结束
_progressThread.IsBackground = true;
_progressThread.Start();

_progressThread.Abort();
// 可选,功用:等到线程结束才继续
_progressThread.Join();
_progressThread = null;

zl194 2010-06-11
  • 打赏
  • 举报
回复
其实没有任何错误,如果把dt放在外面赋值也不会报错。是不是因为dt赋值时间太长了。
zl194 2010-06-11
  • 打赏
  • 举报
回复
看了,没看懂。还是不知道怎么控制。
我那个程序应当很简单的,不知道是为什么。
皇城龙三 2010-06-11
  • 打赏
  • 举报
回复
有没有跟踪一下

具体在什么地方报错?

捷哥1999 2010-06-11
  • 打赏
  • 举报
回复
多线程没有控制好!
看看这里!



源码和实现说明:
http://www.codeproject.com/KB/threads/invoke_other_way.aspx

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧