c#实例-子线程查找另一线程模态对话框句柄(invoke测试)
? ? ?private void button3_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? Task.Factory.StartNew(() => {
? ? ? ? ? ? ? ? Form1?form1 = new Form1();
? ? ? ? ? ? ? ? form1.Name = "MyForm";
? ? ? ? ? ? ? ? form1.Text = "子窗體";
? ? ? ? ? ? ? ? form1.ShowDialog();
? ? ? ? ? ? ? ? MessageBox.Show("aaaaaaa");
? ? ? ? ? ? });
? ? ? ? }
? ? ? ? private void button4_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? IntPtr handler = GetFormHandler("MyForm");
? ? ? ? ? ? Form1 form = (Form1)Control.FromHandle(handler);
? ? ? ? ? ? form.DialogResult = DialogResult.OK;
? ? ? ? }
? ? ? ? public IntPtr GetFormHandler(string name)
? ? ? ? {
? ? ? ? ? ? IntPtr formHadler = IntPtr.Zero;
? ? ? ? ? Task task= Task.Factory.StartNew(() =>
? ? ? ? ? ? {
? ? ? ? ? ? ? ? foreach (Form v in Application.OpenForms)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (v.Name == name)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? v.Invoke(new Action(() =>
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? //此段中的線程是創(chuàng)建form1的線程,經(jīng)測(cè)試此段不會(huì)阻塞,雖然此線程中 其他地方有form1.ShowDialog()
? ? ? ? ? ? ? ? ? ? ? ? ? ? int sum = 8 * 9;
? ? ? ? ? ? ? ? ? ? ? ? ? ? Thread.Sleep(1000);
? ? ? ? ? ? ? ? ? ? ? ? ? ? sum = 8 * 8;
? ? ? ? ? ? ? ? ? ? ? ? ? ? formHadler = v.Handle;
? ? ? ? ? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? ? ? ? ? }));
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? });
? ? ? ? ? ? Task.WaitAll(task);
? ? ? ? ? ? return formHadler;
? ? ? ? }
總結(jié)
以上是生活随笔為你收集整理的c#实例-子线程查找另一线程模态对话框句柄(invoke测试)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 项目 引用(外部) js、css
- 下一篇: C#里面SQLite读取数据的操作