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メソッドを呼び出すことができません。スレッドは完全にGUIをフリーズします
上記の機能はスレッドランチャーであり、一定量のスレッドをランチしたいが、条件に基づいてランチを遅らせたい。私はforループと_wait.WaitOne()を使用します。
何が実行されますか?ボタンコントロール
どのラインが詰まっていますか? _wait.WaitOne()
何が待っていますか? AutoResetEvent
最初のスレッドの昼食後にどうしてですか?私は、開始スレッドのグループを制御し、仕事を終わらせるようにしたい( "ビジネスロジックの使用")、次にもっとスレッドを昼食する。
Run()とは何ですか?それが呼び出されると、どのラインが張り付いていますか?ラインが '_wait.WaitOne()'の場合、 '_wait'(おそらくブロッキングシンクロタイプ)とは何ですか?なぜ最初のスレッドが起動した後にループ内にあるのですか? –
@MartinJamesもう一度チェックしてください – user1364852