Я разрабатываю небольшое приложение. Нужна ваша помощь.C# многопоточный подход в GUI
У меня есть таблица из 10 столбцов. Скажем, я выбираю 5 строк в виде списка. Я беру все значения col_1 в списке, передавая его методу.
Если все значения равны, установите значение combo_box1 = "equal" else value = "not equal".
Текущий подход:
У меня есть 10 списков (? Кажется довольно хромой ... не так я уже задал Ques относительно этого ...), один для каждого цв.
10 вызовов метода, который проверяет равенство значений, каждый для одного списка. Впоследствии установите значения поля со списком (10 комбинированных полей).
Если у меня есть 100 записей, я думаю, что время будет увеличиваться. Итак, я думал о внедрении потоков.
усилию Put:
Я использовал this.Invoke (новый делегат ...) подход к теме, которая пытается получить доступ к управлению главного потока. Он работает нормально. Я пытался манипулировать этим в соответствии с моими потребностями. Не мог этого сделать. Пожалуйста, помогите мне, ребята.
[EDIT]
главным виновником был сравнение изображений ... его принимать очень много времени, чтобы закончить ... ниже код ... я храню все изображение (скажем, Col нет 3), скажем, 10 строк в списке ...
// other stuffs [DllImport("msvcrt.dll", CallingConvention=CallingConvention.Cdecl)] private static extern int memcmp(IntPtr b1, IntPtr b2, long count);
// create a list of images MemoryStream imageStream = new MemoryStream(tempImage.Data.Data); Bitmap artCoverImage = new Bitmap(imageStream); // culprit ? artCoverList.Add(artCoverImage);
// call the method CheckIfEqual(artCoverList) // culprit ?
// THE method private void CheckIfEqual(artCoverList) { Bitmap tempBitMap = artCoverList[0];
foreach (Bitmap bmp in artCoverList) { if (bmp == null) return false; if (bmp.Size != tempBitMap.Size) return false; var bd1 = tempBitMap.LockBits(new Rectangle(new Point(0, 0), tempBitMap.Size), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); IntPtr bd1scan0 = bd1.Scan0; int stride = bd1.Stride; long len = stride * tempBitMap.Height; var bd2 = bmp.LockBits(new Rectangle(new Point(0, 0), bmp.Size), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); IntPtr bd2scan0 = bd2.Scan0; returnValue = memcmp(bd1scan0, bd2scan0, len) == 0; bmp.UnlockBits(bd2); tempBitMap.UnlockBits(bd1); } }
я провел целый день, чтобы получить это сравнение часть изображения работает ... я не думаю, что часть, где он преобразует MEM поток в bmp является виновником ...
[EDIT 2]
ребят ... нужна ваша помощь ... любая идея ... как сравнить список изображений ... кроме выше .. .
Спасибо,
Dev
Во-первых, в зависимости от того, что вы делаете, увеличение записей до 100 не должно вносить столько разницы, особенно если вы просто разбираете список несколько раз. Во-вторых, нам нужна дополнительная информация. Как вы пытались манипулировать потоковым вызовом? Как именно вы хотите, чтобы поток работал? –
вещь количество столбцов может увеличиться ... я хотел бы позвонить, скажем, 3 потока ... каждая обработка 3 cols ... вот так .. – Dev