using Autodesk.Revit.DB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test.DotNet.RevitUI
{
public static class DocumentExtension
{
///
/// 使用委托启动事务.事务内自动进行事务启动,提交、回滚等处理。
///
/// The document.
/// The action.
/// The name.
public static void Invoke(this Document doc, Action action, string name = "default")
{
using (var tr = new Transaction(doc, name))
{
tr.Start();
action(tr);
var status = tr.GetStatus();
switch (status)
{
case TransactionStatus.Started:
tr.Commit();
return;
case TransactionStatus.Committed:
case TransactionStatus.RolledBack:
return;
case TransactionStatus.Error:
tr.RollBack();
return;
default:
return;
}
}
}
///
/// 使用委托启动事务,并返回委托执行结果.事务内自动进行事务启动,提交、回滚等处理。
///
/// The type of the result.
/// The document.
/// The action.
/// The name.
///
public static TResult Invoke(this Document doc, Func func, string name = "default")
{
using (var tr = new Transaction(doc, name))
{
tr.Start();
var result = func(tr);
var status = tr.GetStatus();
switch (status)
{
case TransactionStatus.Started:
tr.Commit();
return result;
case TransactionStatus.Committed:
case TransactionStatus.RolledBack:
return result;
case TransactionStatus.Error:
tr.RollBack();
return result;
default:
return result;
}
}
}
}
}