【问题标题】:Form hangs when called from DLL via PowerShell通过 PowerShell 从 DLL 调用时表单挂起
【发布时间】:2015-11-19 02:45:27
【问题描述】:

我有一个包含几个不同类的 DLL 文件。在这个 DLL 中,我创建了一个 Windows 窗体。

构建 DLL 项目后,我打开了 PowerShell(为了方便,我使用了 ISE..)并执行了以下脚本 -

[reflection.assembly]::LoadFile("...\MyDLL.dll")
$NewForm = New-Object (AssemblyName).(Class Name of a class with a few subs, one of which will show the form I created)
$NewForm.ShowForm()

ShowForm 是一个简单的 sub,它通过调用窗体名称和 .Show() 来显示 windows 窗体。

当我执行此操作并出现表单时,表单会挂起。就好像整个表单都被禁用了一样。我无法与表单上的任何控件进行交互,也无法通过按顶部的红色 X 来关闭它。

我想存储一些与我在 DLL 文件中创建的方法一起使用的表单,这样如果我决定在其他应用程序中使用表单来与它们一起使用,我就不必重新构建表单.

(对于任何想知道为什么我使用 powershell 的人 - 我觉得首先从 Powershell 测试 DLL 中的函数/子程序更容易,因为像 Powershell 这样的命令行工具中的 3 行可以轻松调用子程序 /从 DLL 中获取函数,而不是创建/修改/重新编译 .exe 项目来做同样的事情)

【问题讨论】:

  • 你有消息循环来处理表单事件吗?
  • 我不相信我会这样做。我该怎么做呢?

标签: forms powershell dll


【解决方案1】:

每当我尝试在 PowerShell 中使用表单对象调用 .Show() 方法时,它似乎总是失败。您可能会考虑尝试 .ShowDialog(),它会阻止当前线程执行任何操作,直到它退出,但会话不会挂起。我还没有研究过这背后的“原因”,但对于你所描述的,我假设 .ShowDialog 会为你工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2021-07-07
    • 1970-01-01
    相关资源
    最近更新 更多