.net2005多线程的奇怪问题

clmilan 2006-06-10 09:34:04
Dim t As Thread = New Thread(New ThreadStart(AddressOf aa))
t.Start()

private sub aa()

End Sub
我在aa()里面有个数据库连接,读取数据的操作,可在读取数据出来的时候报这个错:"在该控件上执行的操作正从错误的线程调用。使用 Control.Invoke 或 Control.BeginInvoke 封送到正确的线程才能执行此操作。"
请教各位,这是怎么回事,因为我刚开始用Thread,所以不怎么熟悉.(我数据库连接这一块是封装在一个类里面的)
...全文
548 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿浩No_1 2006-06-11
  • 打赏
  • 举报
回复
学习
clmilan 2006-06-10
  • 打赏
  • 举报
回复
如果树的项目太多的话,尽量在展开子类时才加载子类中的项目吧,这样整体用起来速度平均点

你是不是说刚开始只LOAD主节点,然后点击主节点,再LOAD相应的子节点?
clmilan 2006-06-10
  • 打赏
  • 举报
回复
又出错了
Dim a As BooleanCallBack = New BooleanCallBack(AddressOf loaddata)
Me.Invoke(a)这一行报错说"该行已属于另一个表"
这是什么意思啊
HAVENT 2006-06-10
  • 打赏
  • 举报
回复
如果树的项目太多的话,尽量在展开子类时才加载子类中的项目吧,这样整体用起来速度平均点
kssys 2006-06-10
  • 打赏
  • 举报
回复
加载的代码贴出来瞧瞧
clmilan 2006-06-10
  • 打赏
  • 举报
回复
我是这样做的,我一条SQL读出来之后就全部放DataTable了,之后就是对DataTable的操作
kssys 2006-06-10
  • 打赏
  • 举报
回复
SELECT * 会读取全表,因此应只读取只需要的字段以加快速度。

另:需加载的数据应以一条SQL直接全部读取出来,然后在程序中添加。而不是一条一条的进行读取。
clmilan 2006-06-10
  • 打赏
  • 举报
回复
好象没什么改善
想请教一下,下面这段代码是放在那个Form1_Load事件里的吧
Dim t As Thread = New Thread(New ThreadStart(AddressOf aa))
t.Start()
clmilan 2006-06-10
  • 打赏
  • 举报
回复
对,我确实用了SELECT *
难道把他改成select a,b,c,d 会好点吗?
我试试
kssys 2006-06-10
  • 打赏
  • 举报
回复
检查你的SQL,是否使用了SELECT *语句。

如果使用了上述读取方式,查询数据库将耗费大量时间
clmilan 2006-06-10
  • 打赏
  • 举报
回复
噢~~好了,不报错了
其实我用Thread是为实现一个TreeView的数据库递归绑定,可是为什么添加了线程后,速度仍然很慢呢,是不是我用的不对
clmilan 2006-06-10
  • 打赏
  • 举报
回复
MyMethod OpenDialog = new MyMethod(this.OpenDialog);

在执行这句话的时候,报错

我的代码是 Dim aa As BooleanCallBack = New BooleanCallBack(AddressOf aa)

报错信息为:"AddressOf操作数必须是某个方法的名称(不带圆括号)"
kssys 2006-06-10
  • 打赏
  • 举报
回复
好的,下面是例子:

public delegate void MyMethod();  //声明一个委托,以使其它线程访问

//按钮
private void button1_Click(object sender,EventArgs e)
{
Thread aaa = new Thread(new ThreadStart(OpenDialogOnOtherThread));
aaa.Start();
}

//其它线程打开对话框
void OpenDialogOnOtherThread()
{
MyMethod OpenDialog = new MyMethod(this.OpenDialog);
this.Invoke(OpenDialog);  //在当前线程,调用OpenDialog
}

//打开对话框
void OpenDialog()
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.ShowDialog();
}
clmilan 2006-06-10
  • 打赏
  • 举报
回复
是我自己没写好
现在已经可以了
结贴!
kssys 2006-06-10
  • 打赏
  • 举报
回复
TO:Me.Invoke(a)这一行报错说"该行已属于另一个表"

你用了很多线程吗?使用多线程时应注意并发访问的问题

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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