public static void Display(int[,] matrix)
        {
            for (int i = 0; i < matrix.Rows(); i++)
            {
                for (int j = 0; j < matrix.Cols(); j++)
                {
                    Console.Write("{0,4}", matrix[i, j]);
                }

                Console.WriteLine();
            }
        }
        private static void Calculate(int index, int[,] matrix1, int[,] matrix2, int[,] resultMatrix)
        {
            int[] i2d = ConvertTo2dIndex(index, resultMatrix.Cols());

            int result = 0;

            for (int i = 0; i < matrix1.Cols(); i++)
            {
                result += matrix1[i2d[0], i] * matrix2[i, i2d[1]];
            }

            resultMatrix[i2d[0], i2d[1]] = result;
        }
        public static int[,] Multiply(int[,] matrix1, int[,] matrix2)
        {
            if (matrix1.Cols() != matrix2.Rows())
            {
                throw new InvalidOperationException("Error");
            }

            int[,] result = new int[matrix1.Rows(), matrix2.Cols()];

            Parallel.For(0, result.Length, (index) => { Calculate(index, matrix1, matrix2, result); });

            return(result);
        }