C# 一个类中的两个线程必须执行不同的操作。我的代码不起作用
我有一张表格。单击按钮时,它应重定向到包含2个类的dll。C# 一个类中的两个线程必须执行不同的操作。我的代码不起作用,c#,multithreading,C#,Multithreading,我有一张表格。单击按钮时,它应重定向到包含2个类的dll。 Classxyz: 有两个线程。 线程1:应具有将字符串插入数组的方法 线程2:应该具有从数组返回第一个元素的方法 类数组: 该数组位于类数组中 我的问题: 我无法理解线程是否正在执行任务 xyz类: public void ToDo(string str) { ThreadObject firstThreadObject = new ThreadObject(); firs
Classxyz:
有两个线程。
线程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()
线程,不要中止()
其次,您可以使用ParameterizedThreadStart
对象来启动线程,如下所示:
Thread firstThread = new Thread(new ParameterizedThreadStart(DoWorkpeek));
firstThread.Start(str);
...
firstThread.Join();
secondThread.Join();
ThreadObject threadObject = parameter as ThreadObject;
lock(objq)
str1 = objq.queuepeek(threadObject.str);
MessageBox.Show(str1);
此外,请确保两个线程都可以访问您的objq对象(例如是静态的),并在访问时锁定它,如下所示:
Thread firstThread = new Thread(new ParameterizedThreadStart(DoWorkpeek));
firstThread.Start(str);
...
firstThread.Join();
secondThread.Join();
ThreadObject threadObject = parameter as ThreadObject;
lock(objq)
str1 = objq.queuepeek(threadObject.str);
MessageBox.Show(str1);
另外,您可以使用System.Diagnostics.Debug.WriteLine(str1)
并写入调试输出窗口,而不是使用MessageBox.Show(str1)
。谢谢。我在调试窗口中得到了输出。由于messageBox不工作,我不确定控件是否到达了代码的那一部分并且工作正常。你能解释一下为什么Join()比abort()更好吗。我是线程编程新手。而且,只有在使用parameterizedThreadStart时,参数才会联合排序吗?嗯,Abort()终止线程并可能中断其执行。Join()等待线程完成以继续执行。查看这些链接以查看详细信息:和。ParameterizedThreadStart是向线程传递参数的常用方法。