避免在VB.NET中等待ExecuteOnQuery

避免在VB.NET中等待ExecuteOnQuery,vb.net,oracle,plsql,Vb.net,Oracle,Plsql,如何在VB.net中使用OracleCommand在不等待ExecuteOnQuery完成的情况下继续 我的程序流程如下: 单击某个按钮后,程序将使用OracleCommand调用OracleDB中的包(PL/SQL或多或少会插入或删除/更新),而不返回任何内容。我只想避免等待ExecuteOnQuery完成,这样我就可以执行其他操作。您必须使用多线程来处理此交互,但您应该非常小心。当您使用多线程时,资源争用和同步将成为您的一大挑战(我建议您在决定继续之前查找有关它们的一些信息) 如果您没有正确

如何在VB.net中使用OracleCommand在不等待ExecuteOnQuery完成的情况下继续

我的程序流程如下:


单击某个按钮后,程序将使用OracleCommand调用OracleDB中的包(PL/SQL或多或少会插入或删除/更新),而不返回任何内容。我只想避免等待ExecuteOnQuery完成,这样我就可以执行其他操作。

您必须使用多线程来处理此交互,但您应该非常小心。当您使用多线程时,资源争用同步将成为您的一大挑战(我建议您在决定继续之前查找有关它们的一些信息)

如果您没有正确处理这两个新现象,您可能会损坏共享资源和程序的状态:您可能会在过程仍在执行时尝试重用连接,您可能会在过程终止前关闭应用程序,您可以在绑定阶段之前更改参数值,以及许多单线程无法执行的其他操作

您需要良好的技能才能进入it领域,因此如果您不想深入研究如何处理多线程应用程序,我真的不鼓励您继续走这条路。一个简单而肮脏的方法可能是如下(这是C#我不懂VB,但只是语法有点不同):


如果您谈论的是执行期间无法使用的用户界面,则需要使用多线程。但你应该更详细,以获得有用的答案!对我的问题做了一些小修改@AlessandroRossi
.....
.....

OracleCommand c = connection.CreateCommand();
c.CommandText = "xxx";
c.CommandType = CommandType.StoredProcedure;
Thread myThread = new Thread(
        (ThreadStart)delegate()
        {
            c.ExecuteNonQuery();
        }
    );
myThread.Start(); // Here the procedure execution begins in a different thread and you'll lose control about its flow

.....
.....