다음 Pinvoke 메서드는 작업 개체 관리에 필요한 기본 기능에 대한 액세스를 제공합니다.
[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);
작업 개체를 생성하려면 CreateJobObject:
var handle = CreateJobObject(IntPtr.Zero, null);
작업 개체에 대한 정보를 설정하려면 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()));작업 개체에 프로세스 추가작업 개체를 추가하려면 프로세스를 작업 개체에 적용하려면 AssignProcessToJobObject를 사용하세요.
bool AddProcess(IntPtr processHandle) => AssignProcessToJobObject(handle, processHandle); bool AddProcess(int processId) => AddProcess(Process.GetProcessById(processId).Handle);작업 개체 삭제사용자 정의 일회용 구현을 사용하여 작업 개체를 삭제합니다.
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; }이를 활용하여 구현하면 .NET 애플리케이션에서 작업 개체를 효과적으로 생성, 구성 및 관리할 수 있습니다.
위 내용은 Pinvoke를 사용하여 .NET에서 작업 개체를 관리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!