このForm2のが表示されますクリックしたときに、私はFROM1
により、次のように2つのフォームは、ボタンを持っていました。
From2にはプログレスバーがあり、それが終了するまでMaximun値からProgressbarを数えて更新します。Form2が終了します。この私のコードからのForm2
public delegate void ProgressbarHandler(int value); public partial class Form2 : Form { public event WaitCallback CloseThreadEvent; private Thread t; public void OnCloseEvent(ThreadState state) { if (CloseThreadEvent != null) CloseThreadEvent(state); } public Form2() { InitializeComponent(); progressBar1.Minimum = 0; progressBar1.Maximum = 20000; } private void Form2_Load(object sender, EventArgs e) { InitThread(); } private void InitThread() { t = new Thread(new ThreadStart(RunThread)); t.Start(); CloseThreadEvent += new WaitCallback(CloseForm); Thread tt = new Thread(ThreadObserver); tt.IsBackground = true; tt.Start(); } private void RunThread() { for (int i = 0; i < progressBar1.Maximum; i++) { progressBar1.Invoke(new ProgressbarHandler(UpdateProgressbar), i); } } private void UpdateProgressbar(int value) { progressBar1.Value = value + 1; } private void ThreadObserver() { while (t.IsAlive) { OnCloseEvent(t.ThreadState); } } private void CloseForm(Object state) { if ((ThreadState)state == ThreadState.Stopped) this.Close(); } }
のコードの下
、それは
this.Close();
の「クロススレッド操作ではない有効な」エラーが発生したコーディングする方法の提案を教えてください私の目的に従ってください。
ありがとうございます。
私はとても初心者です。 : – Yoonmy
または、単に:Invoke(新しいMethodInvoker(Close)); – Sean