如何在.NET(Winforms)中访问程序的主循环

本文关键字:程序 访问 循环 NET Winforms | 更新日期: 2023-09-27 18:34:28

这个有点难解释,我希望我解释正确。

我正在尝试访问 .NET 程序的主应用程序循环。 我必须这样做的原因是因为我必须访问主程序线程的循环,以便我可以使用断点或睡眠函数暂停整个应用程序。

我知道代码Application.Run(Form(是如何执行表单的,但是我该怎么做才能访问该表单的主程序循环? 出于以下原因,我试图避免使用 Timer 事件处理程序:当我将 sleep 函数放在 Timer 事件处理程序中时,程序的动画继续在后台运行(这是因为 Timer 事件处理程序是一个单独的线程吗? 但是我需要程序完全停止,就像它被冻结在时间中一样。 目标是逐步编辑循环,并让程序的动画逐帧执行,仅在我逐步编辑主程序的循环时执行。

我知道这听起来很奇怪,但这是我需要的功能。

谢谢大家!

====

====================================================================

编辑:从技术角度来看,更好的解释。

====

====================================================================

在 C 语言中,主窗口入口点为:

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPreInst,LPSTR lpszCmdLine,int nCmdShow)

在这个函数中,我们有一个消息循环代码,例如:

while(GetMessage(&lpMsg,NULL,0,0))
    {   TranslateMessage(&lpMsg);
        DispatchMessage(&lpMsg);
    }

在该函数中,另一个名为"CreateWindow"的函数创建主窗口,然后跳转到名为"WndProc"的回调函数,该函数相当于 .NET 中的事件处理程序。 计时器函数的事件处理程序为:

LRESULT CALLBACK WndProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
    case WM_TIMER:          
        CODE:
        return DefWindowProc(hWnd,messg,wParam,lParam);

我的目标是访问消息循环,在本例中是执行 WM_TIMER 情况的 while 循环,即 .NET 中主入口点,就像在 C 中一样。

以下是我上面描述的程序流的参考链接:

https://msdn.microsoft.com/en-us/library/windows/desktop/ff381409%28v=vs.85%29.aspx

如何在.NET(Winforms)中访问程序的主循环

Application.Run 启动应用程序。"应用程序"对象保存表单并管理调度程序对象(本质上是表单的"消息循环"(。参见: https://msdn.microsoft.com/en-us/library/system.windows.application(v=vs.110(.aspx 。阅读有关调度程序属性的信息。

注意:Windows还有一个操作系统级别的"消息循环"。