public bool CreateWall(XYZ startPoint, XYZ endPoint)
        {
            Wall wall = null;

            lock (_locker)
            {

                TaskContainer.Instance.EnqueueTask(uiapp =>
                    {
                        try
                        {
                            var doc = uiapp.ActiveUIDocument.Document;

                            using (Transaction t = new Transaction(doc, Resources.CreateWall))
                            {
                                t.Start();

                                Curve curve = Line.get_Bound(
                                    new Autodesk.Revit.DB.XYZ(startPoint.X, startPoint.Y, startPoint.Z),
                                    new Autodesk.Revit.DB.XYZ(endPoint.X, endPoint.Y, endPoint.Z));
                                FilteredElementCollector collector = new FilteredElementCollector(doc);
                                var level =
                                    collector
                                        .OfClass(typeof(Level))
                                        .ToElements()
                                        .OfType<Level>()
                                        .FirstOrDefault();

                                #if REVIT2012
                                wall = doc.Create.NewWall(curve, level, false);
                                #else
                                wall = Wall.Create(doc, curve, level.Id, true);
                                #endif

                                t.Commit();
                            }
                        }
                        finally
                        {

                            lock (_locker)
                            {
                                Monitor.Pulse(_locker);
                            }
                        }

                    });

                Monitor.Wait(_locker);
            }
            return wall != null;
        }
 private static void CreateWallAndWriteResult(XYZ point1, XYZ point2, IRevitExternalService service)
 {
     bool res = service.CreateWall(point1, point2);
     Console.WriteLine("{0}: {1}", Resources.CreateWallResult, res);
 }