c#-请教关于C#创建带参数线程的问题

问题描述

请教关于C#创建带参数线程的问题

我现在想创建一个多个线程来求两个矩阵的相乘,其中我把计算用的函数CalMatrix封装在类中方便创建线程时调用,类如下;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Threading;

namespace Read
{
    class MatrixMultiply
    {

        public long[,] matrixC = new long[1024, 1024];

        static int i, j, t;
        public void  CalMatrix(MM m1)
        {

            for (i = 0; i < 1024; i++)
            {
                for (j = 0; j < 1024; j++)
                {
                    for (t = 0; t < 1024; t++)
                    {
                        matrixC[i, j] = matrixC[i, j] + m1.matrixA[i, t] * m1.matrixB[t, j];
                    }
                }
            }
        }
    }
}

又因为该函数需要两个参数,于是我把需要的两个数组封装到另外一个名为MM的类中,如下;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Threading;

namespace Read
{
    class MM
    {
        public long[,] matrixA = new long[1024, 1024];
        public long[,] matrixB = new long[1024, 1024];
        static int i, j, t;
        public void BuildMatrix()
        {
            string fileAddress = @"C:UsersasusDesktop
andom.txt";
            FileStream fs = new FileStream(fileAddress, FileMode.Open);
            StreamReader sr = new StreamReader(fs);
            for (i = 0; i < 1024; i++)
            {
                for (j = 0; j < 1024; j++)
                {
                    string dataStr = null;
                    if ((dataStr = sr.ReadLine()) != null)
                    {
                        long dataVal = Convert.ToInt64(dataStr);
                        matrixA[i, j] = dataVal;
                    }
                }
            }
            fs.Close();
            Console.WriteLine("************************");
            FileStream fs1 = new FileStream(fileAddress, FileMode.Open);
            StreamReader sr1 = new StreamReader(fs1);
            for (i = 1023; i >= 0; i--)
            {
                for (j = 0; j < 1024; j++)
                {
                    string dataStr = null;
                    if ((dataStr = sr1.ReadLine()) != null)
                    {
                        long dataVal = Convert.ToInt64(dataStr);
                        matrixB[i, j] = dataVal;
                    }
                }
            }
            fs1.Close();
            Console.WriteLine("************************");
        }
        public void ResultMatrixPrint(long[,] tx)
        {
            string fileAddress1 = @"C:UsersasusDesktop
esult.txt";
            StreamWriter wr = new StreamWriter(new FileStream(fileAddress1, FileMode.Append));
            for (i = 0; i < 1024; i++)
            {
                for (j = 0; j < 1024; j++)
                {
                    wr.WriteLine(tx[i, j]);
                }
            }
            wr.Flush();
            wr.Close();
        }
    }
}

于是我在主函数中这样创建线程

    MatrixMultiply ma1 = new MatrixMultiply();
    ma1.CalMatrix(mm1);
    ParameterizedThreadStart threadStart = new ParameterizedThreadStart();
    Thread t1 = new Thread(threadStart);
     t1.Start(mm1);

结果出现了这样的错误提示;

于是我把创建的方式改成了这样!也出现了错误提示,其中mm1是MM的实例,ma1是MatrixMultiply的实例;
图片说明
请教各位大牛应该怎么解决这个问题呢?先谢过!

解决方案

c#创建带参数的线程
C#中创建带参数的线程
C#中创建带参数的线程

解决方案二:

ParameterizedThreadStart这里面要传一个参数啊,调用格式为ParameterizedThreadStart(CalMatrix),CalMatrix方法申明的时候参数只能定义为object类。
像这样public void CalMatrix(object m1),在方法体内转换一下类型好了matrixC[i, j] = matrixC[i, j] + (MM)m1.matrixA[i, t] * (MM)m1.matrixB[t, j];

时间: 2024-11-05 16:38:02

c#-请教关于C#创建带参数线程的问题的相关文章

Navicat for MySQL如何创建带参数的存储过程

问题描述 Navicat for MySQL如何创建带参数的存储过程?要通过界面创建,输入参数和输出参数应该怎样书写? 问题补充:飞雪无情 写道 解决方案 回答的不能上传截图..你能看到图就更好明白了.运行图形化是直接点上面面的:"运行",然后输入参数,多个参数逗号分割!解决方案二:呵呵.我就是看到了.嗯,输入参数的格式是IN param1 INTEGER(11), IN param2 INTEGER(11)这样的..调用的时候使用 call 存储过程(参数1,参数2);解决方案三:右

C#创建线程带参数的方法_C#教程

1.无参数线程的创建 Thread thread = new Thread(new ThreadStart(getpic)); thread.Start(); private void showmessage() { Console.WriteLine("hello world"); } 2.带一个参数的线程 使用ParameterizedThreadStart,调用 System.Threading.Thread.Start(System.Object) 重载方法时将包含数据的对象传

C#线程调用带参数的方法

在 .NET Framework 2.0 版中,要实现线程调用带参数的方法有两种办法. 第一种:使用ParameterizedThreadStart. 调用 System.Threading.Thread.Start(System.Object) 重载方法时将包含数据的对象传递给线程. 使用 ParameterizedThreadStart 委托不是传递数据的类型安全的方法,因为 System.Threading.Thread.Start(System.Object) 方法重载接受任何对象. 这

解决-jquery callback 带参数问题

问题描述 jquery callback 带参数问题 今天使用jquery 的animate函数, 发现如果callback带参数的话就会出各种错,那么如何解决这个问题? 解决方案 看下你变量的作用域,是否污染了全局的变量. 最好贴出你的代码. 解决方案二: callback没有参数啊..你到底要干嘛.. 解决方案三: animate() 方法执行 CSS 属性集的自定义动画. 该方法通过CSS样式将元素从一个状态改变为另一个状态.CSS属性值是逐渐改变的,这样就可以创建动画效果. 只有数字值可

参数传递-Android中创建含有参数的快捷方式,启动程序时读取参数

问题描述 Android中创建含有参数的快捷方式,启动程序时读取参数 新手,请见谅. 如果我想传一段文本给快捷方式,并在下次启动此快捷方式时读取出来,代码是怎样的? 具体来说,程序运行起来想实现类似效果: 1.在程序中设定一个值:"张三是胖子",或者"李四是胖子" 2.将将此程序生成为一个含有参数的快捷方式,参数为"张三是胖子",或者"李四是胖子" 3.点生成的快捷方式运行程序,自动读取快捷方式内含的参数,显示出"张

微信公众平台开发(83) 生成带参数二维码

本文介绍在微信公众平台上如何使用高级接口开发生成带参数二维码的功能.   一.场景二维码 为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送. 目前有2种类型的二维码,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1--100000).两种二维码分别适用于帐号绑定.用户来源统计等场景. 用户扫描带场景值二维码时,可能推送

微信公众平台开发文档 生成带参数的二维码

为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送. 目前有2种类型的二维码,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1--100000).两种二维码分别适用于帐号绑定.用户来源统计等场景. 用户扫描带场景值二维码时,可能推送以下两种事件: 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事

ASP调用带参数存储过程的几种方式_存储过程

ASP调用带参数存储过程的几种方式     选择自 hxfwsk 的 Blog   关键字   存储过程  出处      作者: 讨饭猫 ASP调用带参数存储过程的几种方式 最近有很多的朋友问到调用存储过程的问题,这里简单介绍几种ASP调用带参数存储过程的方法. 1 这也是最简单的方法,两个输入参数,无返回值: set connection = server.createobject("adodb.connection") connection.open someDSN  Conne

微信 开发生成带参数的二维码的实例_php技巧

微信开发生成带参数的二维码的讲解 在微信公众号平台开发者那里,在"账号管理"那里,有一项功能是"生成带参数的二维码",通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微信公众号上 用微信扫一扫推送到开发者网址那儿的数据如下: <xml><ToUserName><![CDATA[gh_452****b0f2]]></ToUserName> <FromUserName><![CDATA[o