wpf窗体中如何调用windows窗口?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf窗体中如何调用windows窗口?相关的知识,希望对你有一定的参考价值。

第一个窗口是wpf的,第二个是普通windows窗口,怎么调用?form1.show()不行了
在wpf窗口中添加一个按钮,然后点击执行form1.show()不知道为什么会报错。我用的是vb.net

可以啊,只要你已经创建了form1的实例
dim form1 as new form1
form1.show()
参考技术A 为什么不行了,出现什么错误了

wpf中 我新开一个线程添加控件到主窗体

wpf中 我新开一个线程添加控件到主窗体,thread t=new thread(insertControlToMain);
t.start();
在insertControlToMain方法中 有向主窗体添加控件的操作 , 会报错,, 不知道什么错误原因,
希望大神给出一个好一点的解决方法 因为考虑到下载数据 窗体会假死 我不想窗体假死 等下载完数据再加载到主窗体。。 谢谢

在WinForm中,我们要跨线程访问窗口控件,只需要设置属性CheckForIllegalCrossThreadCalls = false;即可。
在WPF中要麻烦一下,同样的不允许跨线程访问,因为没有权限,访问了会抛异常;
没有CheckForIllegalCrossThreadCalls 属性,可以
在WPF中的窗口控件都有一个Dispatcher属性,允许访问控件的线程;既然不允许直接访问,就告诉控件我们要干什么就好了。
方法如下:

private delegate void outputDelegate(string msg);

private void output(string msg)

this.txtMessage.Dispatcher.Invoke(new outputDelegate(outputAction), msg);


private void outputAction(string msg)

this.txtMessage.AppendText(msg);
this.txtMessage.AppendText("\n");


这里是要 输出一段字符串在TextBox中,只需要调用output方法就可以了。
参考技术A wpf中使用Dispatcher类控制线程, 当异步操作完成后, 可以调用
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() => //to do sth )); 返回UI线程本回答被提问者采纳
参考技术B 窗体的控件是在主线程中的,也就是你一开始运行程序那个。WPF和其他.net规则里不允许跨线程调用,这被认为是不完全的。
一种是直接忽略所有的此类警告,Control.CheckForIllegalCrossThreadCalls = false;好像是这么写的,就是忽略所有的因跨线程产生的不安全警告。不过此方法不推荐。

第二种就是使用委托,具体例子百度有很多。
第三种是用winform的backgroundworker,不过WPF里把这个去掉了。加上的话虽然可以用,但是就会让WPF显得不伦不类。
总之推荐第二种
参考技术C 线程中可以直接这样操作UI的?不需要用委托吗?

以上是关于wpf窗体中如何调用windows窗口?的主要内容,如果未能解决你的问题,请参考以下文章

wpf window窗口中嵌入一个window窗口

WPF 子窗体 在 父窗体 中 打开,初学不懂,请指教

不显示删除回复显示所有回复显示星级回复显示得分回复 WPF中C#代码生成窗体并添加Grid问题

wpf 多语言对应 切换了 dll后 如何刷新窗体(window)

如何在鼠标位置打开具有 Windows 窗体父级的 WPF 窗口?

wpf(windos窗体)