
C#: giải phóng tài nguyên chuẩn — dùng try/finally và UndoMark để builder luôn được Destroy
#C##Builder#Độ tin cậy1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Quên Destroy builder là lỗi rò rỉ phổ biến trong cả C# lẫn Python. Mẫu code chuẩn của C# gom builder, UndoMark và xử lý lỗi vào một khối thống nhất để không bao giờ bỏ sót.
C#: giải phóng tài nguyên chuẩn — dùng…Các bước thực hiện
- Đặt UndoMark. Ngay trước khi thay đổi mô hình.
- Tạo builder trong try. Gán null ngoài để finally dùng được.
- Commit trong try. Cuối khối.
- Destroy trong finally. Luôn chạy.
- Bắt NXException. Hoàn tác và báo lỗi.
Code tham khảo (C#)
using System; using NXOpen; using NXOpen.Features; public class MauBuilderAnToan { public static void Main(string[] args) { Session session = Session.GetSession(); ListingWindow lw = session.ListingWindow; lw.Open(); Part work = session.Parts.Work; if (work == null) { lw.WriteLine("Chưa có Work Part"); return; } Session.UndoMarkId mark = session.SetUndoMark(Session.MarkVisibility.Visible, "Tao khoi"); BlockFeatureBuilder builder = null; try { builder = work.Features.CreateBlockFeatureBuilder(null); builder.Type = BlockFeatureBuilder.Types.OriginAndEdgeLengths; builder.SetOriginAndLengths(new Point3d(0, 0, 0), "100", "50", "20"); Feature f = builder.CommitFeature(); lw.WriteLine("Đã tạo: " + f.GetFeatureName()); } catch (NXException ex) { lw.WriteLine("NX lỗi " + ex.ErrorCode + ": " + ex.Message); session.UndoToMark(mark, "Tao khoi"); } finally { if (builder != null) builder.Destroy(); } } public static int GetUnloadOption(string dummy) { return (int)Session.LibraryUnloadOption.Immediately; } }Giải thích code
- Khai báo
builder = nullngoàitryđể khốifinallytruy cập được, kể cả khi lỗi xảy ra ngay lúc tạo. - Trong C# truyền
nullthay choFeature.Nullcủa Python khi tạo builder mới. UndoToMarktrongcatchđưa mô hình về nguyên trạng nếu thất bại giữa chừng.
Lỗi thường gặp
Destroyném lỗi nếu builder đã bị hủy; đừng gọi hai lần.- Mark ẩn (
Invisible) không hiện trong danh sách Undo của người dùng; dùngVisiblenếu muốn họ tự hoàn tác.
Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.
Điểm: 0
Trả lời
Đăng nhập để tham gia thảo luận.