gpt4 book ai didi

GUI 中的 C# 多线程方法

转载 作者:行者123 更新时间:2023-11-30 21:17:07 24 4
gpt4 key购买 nike

我正在开发一个小应用程序。需要你的帮助。

我有一个包含 10 列的表格。比如说,我在 ListView 中选择了 5 行。我将 col_1 的所有值放在一个列表中,并将其传递给一个方法。

如果所有值都相等,则设置 combo_box1 value = "equal"else value = "not equal"。

当前方法:

我有 10 个列表(看起来很蹩脚......不是吗?我问过一个关于这个的问题......),每个列一个。

10 次调用检查值是否相等的方法,每个调用对应一个列表。随后,设置组合框的(10 个组合框)值。

如果我说 100 条记录,我想花费的时间会增加。所以,我想到了实现线程。

努力投入:

我对尝试访问主线程控件的线程使用了 this.Invoke(new Delegate...) 方法。它工作正常。我试图根据我的需要来操纵它。做不到。请帮帮我。

[编辑]

罪魁祸首是图像比较……它需要很长时间才能完成……下面是代码……我正在存储列表中 10 行的所有图像(比如第 3 列)...

// other stuffs[DllImport("msvcrt.dll", CallingConvention=CallingConvention.Cdecl)]private static extern int memcmp(IntPtr b1, IntPtr b2, long count);

// create a list of imagesMemoryStream imageStream = new MemoryStream(tempImage.Data.Data);Bitmap artCoverImage = new Bitmap(imageStream); // culprit ?artCoverList.Add(artCoverImage);

// call the methodCheckIfEqual(artCoverList) // culprit ?

// THE methodprivate 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]

伙计们......需要你的帮助......任何想法......如何比较图像列表......除了上面......

谢谢,

开发

最佳答案

我会说不要使用 Invoke,而是检查 BackgroundWorker 。它具有在主线程上自动运行的回调事件,因此它可以让您在完成后更轻松地更新 UI,从而避免跨线程 UI 异常。

BackgroundWorker worker = new BackgroundWorker();
worker.RunWorkerCompleted += (s, e) => updateUI();
worker.DoWork += (s, e) => longProcess();

worker.RunWorkerAsync();

关于GUI 中的 C# 多线程方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4958940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com