C#服务(或子线程)调用API无法连接数据库(用WinForm却可以)

youxiazzz12 2013-04-18 02:33:43
请教一个情况,API是delphi的,用来连接数据库的,(其实实际上一共三个API,一个调用一个,最终的底层API是delphi的,而客户要调用的那个API则是C#写的)
我的Demo是弄了个C#的界面,一堆按钮,点击连接按钮之后,会调用底层API(delphi)的如下函数来连接数据库
ConnectTo(fServerName,fDatabaseName,fLoginName,fPassword)

连接成功后该API会执行内部回调函数OnConnectionComplete,回调函数的赋值fConn.OnConnectComplete = OnConnectionComplete。

以上用WinForm下的Demo连接都没有问题。


现在我需要写一个后台服务来调用这个API,在Onstart()里面调用连接函数,但是调用完之后,底层API并没有执行回调函数OnConnectionComplete。

后来我自己写了个test GUI,新建一个线程来调用该API,发现问题依旧。

也在网上翻了不少资料,猜估计是子线程执行完就退出导致的,就在test GUI的线程中加了while,也是没有用。后来尝试用suspend 和resume也不行

想请教一下,同样的连接数据库操作,为什么GUI主线程就可以顺利执行,
而服务或者子线程就不行。

test GUI中子线程代码如下
private Thread ChildThread;

private void button1_Click(object sender, EventArgs e)
{
ChildThread = new Thread(ThreadFunc);
ChildThread.Start();
}

public void ThreadFunc()
{
xxx.xxxAPI ObjxxxAPI;
try
{
i = 10;
ObjxxxAPI=
new xxx.xxxAPI("127.0.0.1",
"127.0.0.1",
"DatabaseName",
"user",
"password",
10,
true,
"Form1",
"");
while (true)
{
//System.Threading.Thread.Sleep(2000);
if (i > 10000) i = 0;
i++;
}
}
catch (Exception e)
{

}
}




所以,个人感觉重点应该是子线程与主线程的不同运行机制,但是网上查到的资料不多,望高人解惑
多谢多谢
...全文
210 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
youxiazzz12 2013-04-22
  • 打赏
  • 举报
回复
终于搞定了,原来是因为消息处理的问题,GUI主线程会自动作消息处理,而自己建的线程是不会做的。 还是谢谢楼上的支持
风一样的大叔 2013-04-19
  • 打赏
  • 举报
回复
youxiazzz12 2013-04-19
  • 打赏
  • 举报
回复
引用 3 楼 qiujialongjjj 的回复:
你把子线程设为后台线程看看,还有就是在子线程函数中设置断点,看看到底进去了没有
设置成后台线程依然不行,子线程函数是能调试进去的。 不知道跟什么阻塞非阻塞有没有关系
风一样的大叔 2013-04-19
  • 打赏
  • 举报
回复
你把子线程设为后台线程看看,还有就是在子线程函数中设置断点,看看到底进去了没有
七神之光 2013-04-19
  • 打赏
  • 举报
回复
youxiazzz12 2013-04-19
  • 打赏
  • 举报
回复
GOD,一晚上居然是0回复,这个问题真的很难吗,求达人指点啊。 自己顶一下
youxiazzz12 2013-04-19
  • 打赏
  • 举报
回复
join是让子线程执行完,才允许主线程执行。 我这里试了,也没有效果

110,534

社区成员

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

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

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