【发布时间】:2011-06-24 22:36:42
【问题描述】:
我正在开发一个小应用程序。需要你的帮助。
我有一个 10 列的表格。说,我在列表视图中选择 5 行。 我将 col_1 的所有值放在一个列表中,并将其传递给一个方法。
如果所有值都相等,则设置 combo_box1 value = "equal" else value = "not equal"。
目前的方法:
我有 10 个列表(看起来很蹩脚...不是吗?我已经问过一个关于这个的问题...),每个列一个。
10 次调用检查值是否相等的方法,每次调用一个列表。随后,设置组合框的(10 个组合框)值。
如果我有 100 条记录,我想所花费的时间会增加。所以,我想到了实现线程。
努力投入:
我已将 this.Invoke(new Delegate...) 方法用于尝试访问主线程控件的线程。它工作正常。我试图根据我的需要来操纵它。不能这样做。请大家帮帮我。
[编辑]
主要的罪魁祸首是图像比较......它需要很长时间才能完成......下面是代码...... 我正在将 10 行的所有图像(比如第 3 列)存储在一个列表中......
// 其他东西 [DllImport("msvcrt.dll", CallingConvention=CallingConvention.Cdecl)] private static extern int memcmp(IntPtr b1, IntPtr b2, long count);
// 创建图像列表 MemoryStream imageStream = new MemoryStream(tempImage.Data.Data); 位图 artCoverImage = new Bitmap(imageStream); // 罪魁祸首? artCoverList.Add(artCoverImage);
// 调用方法 CheckIfEqual(artCoverList) // 罪魁祸首?
// 方法 私人无效 CheckIfEqual(artCoverList) { 位图 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 应该不会产生太大的影响,尤其是在您只解析列表几次的情况下。其次,我们在这里需要更多信息。你是如何试图操纵你的线程调用的?您希望线程如何工作?
-
问题是列数可以增加...我想调用,比如说 3 个线程...每个处理 3 个列...像这样..
标签: c# multithreading