我目前正在进行此练习,我必须将该线程的名称添加到列表中。此练习基于表单,因此使用Windows窗体应用程序。每次用户按下开始按钮时,新线程将在线程名称应添加到列表的同时启动,其中每个线程的名称分配为1,2,3,4 ...等等。
但是每次我使用for循环时它都会给我一个错误'INDEX OUT OF BOUND'我做错了什么?有人可以帮忙吗?
更新
基本上这个练习是参数化的,每次用户按下开始按钮时都需要绘制圆圈。我把我的名单全球化了。
List <Thread> _threadName = new List <Thread>();
private void UI_btnStartThread_Click(object sender, EventArgs e)
{
//create new thread and the referenced the method
Thread circleThread = new Thread(new ParameterizedThreadStart(DrawCircle));
//the data is passed to the thread as an argument
circleThread.Start(new AddCircle(_cDrawer, Color.FromArgb(_mainRandom.Next(0, 256), _mainRandom.Next(0, 256), _mainRandom.Next(0, 256)), _circleSize));
for(int i=1;i<5;i++)
{
circleThread.Name = i.ToString();
//assigning to list
_threadName[i] = circleThread;
}
}
答案 0 :(得分:0)
听起来有一些问题。首先,听起来Container View
没有足够的元素来处理_threadName
的范围。您可以使用i
代替List<Thread>
来避免此问题,因为它会根据需要增长。
其次,您使用最新线程的信息更新列表中的每个元素。我想你只想附加到列表中,保留任何现有值并添加新线程。
Thread[]
如果教师要求您使用数组,则必须跟踪已存储的线程数:
private List<Thread> _threads = new List<Thread>();
private void UI_btnStartThread_Click(object sender, EventArgs e)
{
//create new thread and the referenced the method
Thread newThread = new Thread(new ParameterizedThreadStart(DrawCircle));
//the data is passed to the thread as an argument
newThread.Start(new AddCircle(_cDrawer, Color.FromArgb(_mainRandom.Next(0, 256), _mainRandom.Next(0, 256), _mainRandom.Next(0, 256)), _circleSize));
_threads.Add(newThread);
}
答案 1 :(得分:0)
你做错了几件事。按钮单击 - 您生成1个线程
Thread circleThread = new Thread(new ParameterizedThreadStart(DrawCircle));
//the data is passed to the thread as an argument
circleThread.Start(new AddCircle(_cDrawer, Color.FromArgb(_mainRandom.Next(0, 256), _mainRandom.Next(0, 256), _mainRandom.Next(0, 256)), _circleSize));
然后你循环4次并重命名相同的线程并将其添加到_threadName集合(数组)。
for(int i=1;i<5;i++)
{
circleThread.Name = i.ToString();
//assigning to list
_threadName[i] = circleThread;
}
相反做这个(示例代码 - 直接写在这里):
在Form1类
中 List<Thread> _AllThreads = new List<Thread>(); // This will hold ref to all threads you create
按钮点击事件中的下一步:
private void UI_btnStartThread_Click(object sender, EventArgs e)
{
Thread myThrd = new Thread(......)
myThrd.Name = _AllThreads.Count + 1;
// Start the Thread here
_AllThreads.Add(myThrd);
}
答案 2 :(得分:-1)
基本上,此练习已参数化,每次用户按下开始按钮时都需要绘制圆圈。我把我的名单全球化了。
private void UI_btnStartThread_Click(object sender, EventArgs e)
{
//create new thread and the referenced the method
Thread circleThread = new Thread(new ParameterizedThreadStart(DrawCircle));
//the data is passed to the thread as an argument
circleThread.Start(new AddCircle(_cDrawer, Color.FromArgb(_mainRandom.Next(0, 256), _mainRandom.Next(0, 256), _mainRandom.Next(0, 256)), _circleSize));
for(int i=1;i<5;i++)
{
circleThread.Name = i.ToString();
//assigning to list
_threadName[i] = circleThread;
}
}