【发布时间】:2018-08-10 09:10:43
【问题描述】:
我引用了 System.Windows.Forms.dll,并想使用Application.Run();,但我的应用程序无法打开。我在控制台中没有收到任何错误,并且该应用程序在任务管理器中可见。
这是我的代码:
public partial class MainWindow : Window
{
TextBoxOutputter outputter;
public MainWindow()
{
InitializeComponent();
Init();
}
public void Init()
{
outputter = new TextBoxOutputter(TestBox);
Console.SetOut(outputter);
using (var api = new KeystrokeAPI())
{
api.CreateKeyboardHook((character) => { Console.Write(character); });
Application.Run();
}
}
}
如果没有Application.Run();,应用程序会运行,但在按下任意键后会立即崩溃。我在崩溃时收到此消息:
CallbackOnCollectedDelegate' : '对垃圾进行了回调 收集类型的委托 'KeystrokeAPI!Keystroke.API.User32+LowLevelHook::Invoke'。这可能 导致应用程序崩溃、损坏和数据丢失。通过时 委托给非托管代码,它们必须由托管保持活动状态 应用程序,直到保证它们永远不会被调用。'
我正在使用这个 API:https://github.com/fabriciorissetto/KeystrokeAPI
【问题讨论】:
-
显示应用程序的入口点以及创建
MainWindow的位置,看起来您可能正在做一些奇怪的事情,可能调用 Run 两次或其他什么,这并不能完全解释错误虽然... -
在
public partial class MainWindow : Window {的顶部 -
为什么要在窗口中调用 Application.Run?