类中的 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);
未显示。
首先,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)
。