线程内的 SQLConnection 卡住了终结线程

问题描述 投票:0回答:1

我们有一个与主线程并行读取数据库的类。

public class CardHandligSpeedometer : IDisposable
{
    private Thread m_Thread;
    public CardHandligSpeedometer()
    {
        createThread();        
}        

    public void StartThread()
    {
        m_IsStopped = false;
        if (m_Thread == null)
        {
            createThread();
        }
        m_Thread.Start();
    }

    public void StopThread()
    {
        m_IsStopped = true;
        if (m_Thread != null)
        {
            m_Thread.Join(500);
            if (m_Thread != null && m_Thread.IsAlive)
            {
                m_Thread.Abort();
            }
            m_Thread = null;
        }
    }

    public void Dispose()
    {
        StopThread();
    }

    void getHandledCard()
    {
        
       while (!m_IsStopped)
       {                    
        try
            {
                using (SqlConnection connection = new SqlConnection(LetFlowLib.FactoryData.StrCnt))
                {
                    connection.Open();
                    using (SqlCommand cmd = new SqlCommand("GetHandledCardCountFor2Hours", connection))
                    {
             //code
                    }
                Thread.Sleep(m_Interval);
            }
            catch (Exception ex)
            {
                 //code
            }                
        }            
    }

    private void createThread()
    {
        m_Thread = new Thread(getHandledCard);
        m_Thread.SetApartmentState(ApartmentState.MTA);
        m_Thread.IsBackground = true;
    }
}

在主线程中创建并启动一个线程

m_CardHandlingSpeedometer = gcnew ltr_GUI::CardHandligSpeedometer(_CTX.GetAppointID(), 30000);
m_CardHandlingSpeedometer->StartThread();

第一次从数据库读取并退出“using”后,终结线程被阻塞。 如果GC::收集(2);和 GC::WaitForPendingFinalizers();在主线程中调用,程序会冻结在 WaitForPendingFinalizers 方法上。 但如果在创建方法createThread()中将SATA更改为MTA,则一切正常。 原因是什么?

c# multithreading sqlconnection
1个回答
0
投票

我们也可以创建多个数据集吗?

我是从我的一位客户的角度问这个问题的,他正在德国的 https://www.bitro.de 帮助游戏玩家销售游戏配件。因此,他要求根据每种语言提供多个数据集。这对他有帮助还是结果会保持不变。

© www.soinside.com 2019 - 2024. All rights reserved.