小编Gav*_*ill的帖子

带有消息泵的控制台应用程序

我正在尝试编写一个控制台应用程序(C# .NET),它使用第 3 方 DLL 中的非托管代码。

外部程序集大量使用回调。我的示例应用程序使用 Windows 窗体。

示例代码(Windows 窗体)使用 ThreadPool.QueueUserWorkItem

ThreadPool.QueueUserWorkItem(new WaitCallback(ConnectToControlPanel));
Run Code Online (Sandbox Code Playgroud)

看起来 Windows 窗体有一个消息泵来处理回调。控制台应用程序并非如此,因此我需要构建自己的应用程序。

我尝试添加重置事件

private static ManualResetEvent resetEvent = new ManualResetEvent(false);

static void main()
{
      ThreadPool.QueueUserWorkItem(new WaitCallback(ConnectToControlPanel));
      resetEvent.WaitOne();
}

private void ConnectToControlPanel()
{
   //Call external function from unmanaged DLL
   resetEvent.Set();
}
Run Code Online (Sandbox Code Playgroud)

那是行不通的。

我的问题似乎与此非常相似,但除了使用 Win.Forms 和调用 Application.DoEvents() 之外没有真正的解决方案

编辑

我这样修改了我的代码:

Task task = Task.Factory.StartNew(() => ConnectToControlPanel());
            while (task.Status != TaskStatus.RanToCompletion)
            {
                Application.DoEvents();
                Thread.Sleep(500);
            }
Run Code Online (Sandbox Code Playgroud)

这是可行的,回调会在进度上被调用,结果是成功而不是超时。

尽管每次进行外部调用时都必须运行那个丑陋的循环,但感觉不太对劲。

我还尝试过启动另一个不断调用的线程,Application.DoEvents()但这不起作用,所以我假设它与在进行调用的同一线程中运行有关。

.net c# message loops

5
推荐指数
0
解决办法
1806
查看次数

Azure 事件网格 / 函数 / ngrok

我正在尝试按照使用 ngrok 进行本地测试的说明进行操作

我使用 C# 示例在本地运行我的事件网格和我的函数在 VS 中运行。但是,当我尝试使用端点订阅我的事件时

https://xxxx.ngrok.io/admin/extensions/EventGridExtensionConfig?functionName=EventGridTrigger
Run Code Online (Sandbox Code Playgroud)

我的本地 ngrok 控制台显示:

POST /admin/extensions/EventGridExtensionConfig 404 Not Found
Run Code Online (Sandbox Code Playgroud)

VS中的函数代码:

  [FunctionName("EventGridTrigger")]
    public static void Run([EventGridTrigger]EventGridEvent eventGridEvent, TraceWriter log)
    {
        log.Info(eventGridEvent.Data.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

azure azure-functions azure-eventgrid

1
推荐指数
2
解决办法
1268
查看次数

标签 统计

.net ×1

azure ×1

azure-eventgrid ×1

azure-functions ×1

c# ×1

loops ×1

message ×1