private List<string> _privileges;
private int _installedTime;
+ private Dictionary<IntPtr, Interop.PackageManager.PackageManagerSizeInfoCallback> _packageManagerSizeInfoCallbackDict = new Dictionary<IntPtr, Interop.PackageManager.PackageManagerSizeInfoCallback>();
+ private int _callbackId = 0;
+
private Package(string pkgId)
{
_id = pkgId;
var pkgSizeInfo = PackageSizeInformation.GetPackageSizeInformation(sizeInfoHandle);
tcs.TrySetResult(pkgSizeInfo);
}
+
+ lock (_packageManagerSizeInfoCallbackDict)
+ {
+ _packageManagerSizeInfoCallbackDict.Remove(userData);
+ }
};
- Interop.PackageManager.ErrorCode err = Interop.PackageManager.PackageManagerGetSizeInfo(Id, sizeInfoCb, IntPtr.Zero);
+ IntPtr callbackId;
+ lock (_packageManagerSizeInfoCallbackDict)
+ {
+ callbackId = (IntPtr)_callbackId++;
+ _packageManagerSizeInfoCallbackDict[callbackId] = sizeInfoCb;
+ }
+
+ Interop.PackageManager.ErrorCode err = Interop.PackageManager.PackageManagerGetSizeInfo(Id, sizeInfoCb, callbackId);
if (err != Interop.PackageManager.ErrorCode.None)
{
tcs.TrySetException(PackageManagerErrorFactory.GetException(err, "Failed to get total package size info of " + Id));
private static Interop.PackageManager.PackageManagerEventCallback s_packageManagerEventCallback;
+ private static Dictionary<IntPtr, Interop.PackageManager.PackageManagerTotalSizeInfoCallback> s_totalSizeInfoCallbackDict = new Dictionary<IntPtr, Interop.PackageManager.PackageManagerTotalSizeInfoCallback>();
+ private static int s_callbackId = 0;
+
/// <summary>
/// Event callback method for the request.
/// </summary>
public static async Task<PackageSizeInformation> GetTotalSizeInformationAsync()
{
TaskCompletionSource<PackageSizeInformation> tcs = new TaskCompletionSource<PackageSizeInformation>();
+
Interop.PackageManager.PackageManagerTotalSizeInfoCallback cb = (handle, userData) =>
{
if (handle != IntPtr.Zero)
{
tcs.TrySetResult(PackageSizeInformation.GetPackageSizeInformation(handle));
}
+
+ lock (s_totalSizeInfoCallbackDict)
+ {
+ s_totalSizeInfoCallbackDict.Remove(userData);
+ }
};
- var err = Interop.PackageManager.PackageManagerGetTotalSizeInfo(cb, IntPtr.Zero);
+ IntPtr callbackId;
+ lock (s_totalSizeInfoCallbackDict)
+ {
+ callbackId = (IntPtr)s_callbackId++;
+ s_totalSizeInfoCallbackDict[callbackId] = cb;
+ }
+
+ var err = Interop.PackageManager.PackageManagerGetTotalSizeInfo(cb, callbackId);
if (err != Interop.PackageManager.ErrorCode.None)
{
tcs.TrySetException(PackageManagerErrorFactory.GetException(err, "Failed to get total package size info"));