static private void EndEditBitmap(IAsyncResult ar) { DelegateEditBitmap dlgt = (DelegateEditBitmap)ar.AsyncState; // Complete the call. Int16 itemP; Bitmap bmpCurrent = dlgt.EndInvoke(out Result, out itemP, ar); lock (bmp[itemP]) { if (bmpCurrent != null) { bmp[itemP] = (Bitmap)bmpCurrent.Clone(); bmpCurrent.Dispose(); } } Debug.WriteLine("item " + itemP.ToString()); if (semaforScreenItems.Contains(itemP)) { semaforScreenItems.Remove(itemP); } }
private void FDataEdit() { try { if (im != null) { Int16[] semaforScreenItemsP; // Array of items that is displaied (maped) on screen (can be one or 2 elements by coefficient > 4) semaforScreenItems = new List <Int16>(DetermineScreenItem()); semaforScreenItemsP = semaforScreenItems.ToArray(); // Items of the screen are processed on the first Result = HRESULT.S_OK; foreach (Int16 item in semaforScreenItems) { Int16 itemP = item; Int16 itemWidthP = itemWidth; if (bmp[item] != null) { FEditThread threadEditBitmap = new FEditThread(item, getModeEditStruct(), (Int16)bmp[item].Width, stSerOb.UseAdjustment, height_frame_bmp); DelegateEditBitmap delegateEditThread = new DelegateEditBitmap(threadEditBitmap.FDataEditThread); AsyncCallback callbackEditBitmap = new AsyncCallback(EndEditBitmap); IAsyncResult ar = delegateEditThread.BeginInvoke(out Result, out itemP, callbackEditBitmap, delegateEditThread); } else { semaforScreenItems.Remove(item); if ((Result != HRESULT.S_OK) || (semaforScreenItems.Count == 0)) { Mode = MODE.NotActive; return; } } } while ((semaforScreenItems.Count != 0) && (Mode != MODE.Scan) && (Result == HRESULT.S_OK)) { // Thread.Sleep(1000); } Debug.WriteLine("update "); Invalidate(); Update(); if (Result != HRESULT.S_OK) { Mode = MODE.NotActive; return; } for (Int16 item = 0; item < bmp.Length; item++) { if (Array.IndexOf(semaforScreenItemsP, item) == -1) { Int16 itemWidthP = itemWidth; if (bmp[item] != null) { FEditThread threadEditBitmap = new FEditThread(item, getModeEditStruct(), (Int16)bmp[item].Width, stSerOb.UseAdjustment, height_frame_bmp); DelegateEditBitmap delegateEditThread = new DelegateEditBitmap(threadEditBitmap.FDataEditThread); AsyncCallback callbackEditBitmap = new AsyncCallback(EndEditBitmap); IAsyncResult ar = delegateEditThread.BeginInvoke(out Result, out item, callbackEditBitmap, delegateEditThread); } else { semaforScreenItems.Remove(item); if ((Result != HRESULT.S_OK) && (semaforScreenItems.Count == 0)) { Mode = MODE.NotActive; return; } } } } } } catch (Exception e) { } Mode = MODE.NotActive; }