IEnumWorkItems (Interfaces)
Last changed: -203.167.226.133

.
Summary
There is some helper code below for actually using the iterator as the marshalling seemed impossible with resorting to the unmanaged helper function in System.Runtime.InteropServices.Marshal. Not all methods have been tested, so be careful!

C# Definition:

    [Guid("148BD528-A2AB-11CE-B11F-00AA00530503"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IEnumWorkItems
    {
    int Next(uint celt, out IntPtr names,out uint namecount);
    int Skip(uint celt);
    int Reset() ;
    int Clone([MarshalAs(UnmanagedType.IUnknown)] out object EnumWorkItems);
    };

Helper Code

    using System;
    using System.Collections.Generic;
    using System.Runtime.InteropServices;

    static public List<string> TaskList(ITaskScheduler taskscheduler)
    {
    object obj;

    taskscheduler.Enum(out obj);

    IEnumWorkItems enumerator = obj as IEnumWorkItems;
    uint       nameCount;
    IntPtr     namePtr;
    List<string>   list       = new List<string>();

    while (enumerator.Next(1, out namePtr, out nameCount) == 0 && nameCount == 1)
    {
        IntPtr name = Marshal.ReadIntPtr(namePtr);

        list.Add(Marshal.PtrToStringUni(name));

        CoTaskMemFree(namePtr);
        CoTaskMemFree(name);
    }

    return list;
    }

    [DllImport("ole32.Dll")]
    static extern void CoTaskMemFree(IntPtr pv);

VB Definition:

<ComImport> _
<Guid("TODO")> _
'TODO: Insert <InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> _ if this doesn't derive from IDispatch
Interface IEnumWorkItems
   TODO
End Interface

User-Defined Types:

None.

Notes:

None.

Documentation