Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 正在尝试将4个大型Sub更改为4个线程以节省时间。。。螺纹不是';t起动_Vb.net_Multithreading_Visual Studio 2012 - Fatal编程技术网

Vb.net 正在尝试将4个大型Sub更改为4个线程以节省时间。。。螺纹不是';t起动

Vb.net 正在尝试将4个大型Sub更改为4个线程以节省时间。。。螺纹不是';t起动,vb.net,multithreading,visual-studio-2012,Vb.net,Multithreading,Visual Studio 2012,情况是这样的。运行VS2012,代码在VB.NET中,框架为4.0。我有一个制作报告的程序。它为大约50000个不同的客户对sql数据库进行各种查询,因此线性运行该程序,在服务器上大约需要17个小时,如果我尝试通过调试完成,大约需要36个小时。我正试图把它简化成我们可以在晚上运行的东西,并希望使用线程 在主加载中调用4个主子程序,同时生成4个单独的文件。虽然它们引用相同的数据库,但它只是select语句,所以我可以同时运行它们,对吗?所以我把4个子程序调用改成了这个 Imports Sy

情况是这样的。运行VS2012,代码在VB.NET中,框架为4.0。我有一个制作报告的程序。它为大约50000个不同的客户对sql数据库进行各种查询,因此线性运行该程序,在服务器上大约需要17个小时,如果我尝试通过调试完成,大约需要36个小时。我正试图把它简化成我们可以在晚上运行的东西,并希望使用线程

在主加载中调用4个主子程序,同时生成4个单独的文件。虽然它们引用相同的数据库,但它只是select语句,所以我可以同时运行它们,对吗?所以我把4个子程序调用改成了这个

    Imports System.Data.OleDb
    Imports System.Data.SqlClient
    Imports System.IO
    Imports CDDReports.RiskRatings
    Imports System.Threading

    Public Class Main

    Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim trd1, trd2, trd3, trd4 As Thread
    trd1 = New Thread(AddressOf RunRiskRatedBusinessReport)
    trd2 = New Thread(AddressOf RunRiskRatedConsumerReport)
    trd3 = New Thread(AddressOf RunRatingVarianceBusinessReport)
    trd4 = New Thread(AddressOf RunRatingVarianceConsumerReport)

    trd1.Start()
    trd2.Start()
    trd3.Start()
    trd4.Start()
    End Sub
    //subroutines defined
    end class
但是当我运行程序时,现在什么都没有发生。偶尔会创建一个或两个文件(每个子例程的前几行创建该文件),所以看起来它可能正在启动它们?但是他们马上就退出了,任务调度程序说这个过程已经完成了。。。但什么都没有运行。我做错了什么,这些线程要么没有开始,要么几乎立即结束

更新:我在整个子例程中添加了一个try-catch,所以如果它们由于任何原因失败,它应该会发送一封电子邮件。。。同样的事情也会发生:过程开始并立即完成,没有电子邮件发送。我还添加了下面的代码,但没有任何更改。如果主线程没有权限问题,线程会有权限问题吗

    While trd4.ThreadState = ThreadState.Running
        While trd3.ThreadState = ThreadState.Running
            While trd2.ThreadState = ThreadState.Running
                While trd1.ThreadState = ThreadState.Running
                    Thread.Sleep(10000)
                End While
            End While
        End While
    End While

如果这些线程中的任何一个抛出异常会发生什么?从技术上讲,什么都没有。但是,代码都是一样的,在我引入线程之前,它运行得很好,但这需要花费很长时间。所以我想我应该能够以相同的结果同时运行它们……是否有代码确保您正在等待线程完成?您没有将它们设置为后台线程,因此您的主函数可以完成,但在线程完成或出错之前,请将其保留在前台运行。@tencntraze在这里起作用。很可能是主进程正在关闭并中断进程中的所有线程。确保您正在等待它们完成。好的。尝试代替
线程。Sleep(10000)
循环。