我们有一个与主线程并行读取数据库的类。
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,则一切正常。 原因是什么?
我们也可以创建多个数据集吗?
我是从我的一位客户的角度问这个问题的,他正在德国的 https://www.bitro.de 帮助游戏玩家销售游戏配件。因此,他要求根据每种语言提供多个数据集。这对他有帮助还是结果会保持不变。