private delegate void Runner(); //A delegate, but this attempt didn't work
public void Run()
{
Stager.InstructionsMemory = InstructionsTextBox.Text.Split('\n');
Stager.InintializeLists();
InstructionThread = new Thread[Stager.InstructionsMemory.Length];
PipelineInitializor();
BlockingCollection<Func<object>>[] tasks = new BlockingCollection<Func<object>>[Stager.InstructionsMemory.Length];
PCounterLabelUpdate up = new PCounterLabelUpdate(PCounterLabelUpdater);
MemoryUpdater MemUp = new MemoryUpdater(UpdateMemoryLists);
ButtonControl del = new ButtonControl(ButtonController);
ExecuteBtn.Invoke(del, new bool[] { false, true });
Cycle = 0;
for (APCounter = 0; APCounter < Stager.InstructionsMemory.Length; APCounter++)
{
int i1 = APCounter;
int i = APCounter; //Local Copy of Counter
tasks[i] = new BlockingCollection<Func<object>>();
tasks[i].Add(() => Fetch(i1));
tasks[i].Add(() => Decode(i1));
tasks[i].Add(() => ALURes(i1));
tasks[i].Add(() => Memory(i1));
tasks[i].Add(() => WriteB(i1));
InstructionThread[i] = new Thread(() => Worker(i1, tasks[i1]));
InstructionThread[i1].Start(); //Start a Thread
CycleLbl.Invoke(up); // Update GUI Control
this.Invoke(MemUp); // UPdate GUI
_wait.WaitOne(); //Wait
}
ExecuteBtn.Invoke(del, new bool[] { true, false });
}
GUI が完全にフリーズし、set メソッドを呼び出せなくなります。
上記の機能はスレッドランチャーで、ある程度スレッドをランチしたいが、条件によってはランチを遅らせたい。for ループと _wait.WaitOne(); を使用します。
どのような通話が実行されますか? ボタンコントロール
引っかかるのは何線?_wait.WaitOne()
待機とは AutoResetEvent
なぜ最初のスレッドの昼食後ですか?開始スレッドのグループを制御し、それらにジョブを完了させ (「ビジネス ロジックの使用」)、その後、さらにスレッドを開始させたいと考えています。