Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menguruskan Objek Kerja dalam .NET Menggunakan Pinvoke?
Kaedah Pinvoke berikut menyediakan akses kepada fungsi asli yang diperlukan untuk pengurusan objek kerja:
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)] static extern IntPtr CreateJobObject(IntPtr a, string lpName); [DllImport("kernel32.dll")] static extern bool SetInformationJobObject(IntPtr hJob, JobObjectInfoType infoType, IntPtr lpJobObjectInfo, UInt32 cbJobObjectInfoLength); [DllImport("kernel32.dll", SetLastError = true)] static extern bool AssignProcessToJobObject(IntPtr job, IntPtr process); [DllImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool CloseHandle(IntPtr hObject);
Untuk mencipta objek kerja, gunakan CreateJobObject:
var handle = CreateJobObject(IntPtr.Zero, null);
Untuk menetapkan maklumat untuk objek kerja, gunakan SetInformationJobObject:
var info = new JOBOBJECT_BASIC_LIMIT_INFORMATION { LimitFlags = 0x2000 }; var extendedInfo = new JOBOBJECT_EXTENDED_LIMIT_INFORMATION { BasicLimitInformation = info }; int length = Marshal.SizeOf(typeof(JOBOBJECT_EXTENDED_LIMIT_INFORMATION)); IntPtr extendedInfoPtr = Marshal.AllocHGlobal(length); Marshal.StructureToPtr(extendedInfo, extendedInfoPtr, false); if (!SetInformationJobObject(handle, JobObjectInfoType.ExtendedLimitInformation, extendedInfoPtr, (uint)length)) throw new Exception(string.Format("Unable to set information. Error: {0}", Marshal.GetLastWin32Error()));
Untuk menambah proses pada kerja objek, gunakan AssignProcessToJobObject:
bool AddProcess(IntPtr processHandle) => AssignProcessToJobObject(handle, processHandle); bool AddProcess(int processId) => AddProcess(Process.GetProcessById(processId).Handle);
Lupuskan objek kerja menggunakan pelaksanaan Boleh guna tersuai:
public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (disposed) return; if (disposing) { } Close(); disposed = true; } public void Close() { CloseHandle(handle); handle = IntPtr.Zero; }
Dengan menggunakan pelaksanaan ini, anda boleh mencipta, mengkonfigurasi dan mengurus objek kerja dengan berkesan dalam aplikasi .NET anda.
Atas ialah kandungan terperinci Bagaimana untuk Menguruskan Objek Kerja dalam .NET Menggunakan Pinvoke?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!