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

本文关键字:操作 代码 不起作用 执行 我的 线程 | 更新日期: 2023-09-27 18:35:28

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

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

类 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);

未显示。

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

首先,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)