我有一个AddOn,它使用SAP Business One SDK。我的AddOn有一些Threads,每个都有Transactions。 SAP Business One SDK仅按会话接受一个事务,如果正在使用事务,则无法启动事务。
实际上我在StartTransaction方法中有这个控件:
StarTransaction()
{
if (!Monitor.TryEnter(syncRoot, new TimeSpan(0, 0, 0, 10)))
throw new TimeoutException("Transaction is busy, Try Again in some seconds");
mCompany.StartTransaction();
}
EndTransaction()
{
try
{
mCompany.EndTransaction(endType);
}
finally
{
Monitor.Exit(syncRoot);
}
}
在屏幕上,我抓住了这个命令(例子):
catch (TimeoutException Ex)
{
AddOn.Mensagens.ShowStatusBarMessage('Please, try again');
}
实际上这段代码有效,但只能运行一次。 收到此消息后,我再次启动该流程,并且返回的消息将同样为“再试一次”'。
我使用错误的TryEnter或忘记发布什么东西?我无法完成交易,因为其他流程可能正在使用。
任何帮助将不胜感激。
答案 0 :(得分:0)
你忘了释放锁定。应该像
StarTransaction()
{
if (!Monitor.TryEnter(syncRoot, new TimeSpan(0, 0, 0, 10)))
throw new TimeoutException("Transaction is busy, Try Again in some seconds");
// if we are here, then lock was successfully taken
try
{
mCompany.StartTransaction();
}
finally
{
Monitor.Exit(syncRoot);
}
}