繁体   English   中英

一个类中的2个线程必须执行不同的操作。 我的代码不起作用

[英]2 threads in a class have to perform different actions. My code is not working

我有一张表格。 单击按钮时,它应重定向到一个dll,其中有2个类。
Classxyz:
有2个主题。
线程1:应该有将字符串插入数组的方法
线程2:应该有从数组中返回第一个元素的方法
Classarray:
该数组是一个类阵列。

我的问题:
我无法理解我的线程是否正在执行他们的任务。

xyz类:

        public void ToDo(string str)
       {
        ThreadObject firstThreadObject = new ThreadObject();
        firstThreadObject.str = str;


        Thread firstThread = new Thread(DoWorkpeek);
        firstThread.Start(firstThreadObject);


        ThreadObject secondThreadObject = new ThreadObject();

        secondThreadObject.str = str;
        Thread secondThread = new Thread(DoWorkenque);
        secondThread.Start(secondThreadObject);

        firstThread.Abort();
        secondThread.Abort();

    }

    public void DoWorkpeek(object parameter)
    {
        ThreadObject threadObject = parameter as ThreadObject;
        str1 = objq.queuepeek(threadObject.str);
        MessageBox.Show(str1);
    }
    public void DoWorkenque(object parameter)
    {
        ThreadObject threadObject = parameter as ThreadObject;
        objq.enqueue(threadObject.str);
    }

我的代码是否正确?

MessageBox.show(str1);

没有显示。

首先, Join()线程,不要Abort()它们。

其次,您可以使用ParameterizedThreadStart对象来启动线程,如下所示:

Thread firstThread = new Thread(new ParameterizedThreadStart(DoWorkpeek));
firstThread.Start(str);

...

firstThread.Join();
secondThread.Join();

此外,确保两个线程都可以访问您的objq对象(例如是静态的)并在访问时将其锁定,如下所示:

ThreadObject threadObject = parameter as ThreadObject;
lock(objq)
    str1 = objq.queuepeek(threadObject.str);
MessageBox.Show(str1);

此外,您可以使用System.Diagnostics.Debug.WriteLine(str1)而不是使用MessageBox.Show(str1) System.Diagnostics.Debug.WriteLine(str1)并写入Debug输出窗口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM