我正在开发一个小应用程序。需要你的帮助。GUI中的C#多线程方法
我有一个10列的表。说,我在列表视图中选择5行。 我将列表中的col_1的所有值都传递给一个方法。
如果所有值相等,则设置combo_box1值=“相等”,否则值=“不等于”。
当前的方法:
我有10名列表(?似乎很跛脚......是不是我问过关于这个疑问句......),每一个山坳。
10调用检查值是否相等的方法,每个调用一个列表。随后,设置组合框的(10个组合框)值。
如果我有100条记录,我估计所花的时间会增加。所以,我想到了实现线程。
的精力投放:
我已经使用了this.Invoke(新的委托...)针对尝试访问主线程的控制线程的方法。它工作正常。我试图根据我的需要操纵这个。不能这样做。请帮帮我。
[编辑]
的罪魁祸首是图像比较......其采取相当长的时间才能完成......下面是代码... 我存储的所有图像(比如山坳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是罪魁祸首...
[编辑2]
家伙...需要你的帮助......任何想法...如何比较图像的列表...除上述以外的.. 。
感谢,
开发
首先,根据你在做什么,增加记录到100应该不会有太大的差别,特别是如果你只是在列表上几次解析。其次,我们需要更多的信息。你是如何尝试操纵你的线程调用的?你希望线程如何工作? – 2011-02-10 15:30:00
事情是列数可以增加...我想打电话,说3个线程...每个处理3列......这样.. – Dev 2011-02-10 15:32:33