List <ArenaPlayerPCRResult> GetArenaPlayerOCRResults(Bitmap viewportCapture, RECT viewportRect) { var r = new List <ArenaPlayerPCRResult>(); for (int i = 0; i < 3; i++) { r.Add(new ArenaPlayerPCRResult()); } var tasks = new Task[3]; var viewportCaptureClone = viewportCapture.ToOpenCvMat(); for (int i = 0; i < 3; i++) { var index = i; var task = new Task(() => { var name = MumuState.DoArenaPlayerNameOCR(viewportCaptureClone, viewportRect, index); var rank = MumuState.DoArenaPlayerRankOCR(viewportCaptureClone, viewportRect, index); r[index] = new ArenaPlayerPCRResult() { Index = index, Name = name, Rank = rank, }; }); task.Start(); tasks[i] = task; } Task.WaitAll(tasks); return(r); }