跨线程调用(c#、WaveEngine)

Cross Thread invoke (c#, WaveEngine)

我正在寻找一种方法来在不同的线程上调用函数

我们正在使用一个服务器 (gRPC),它在收到数据时发送数据,客户端的任务是 运行,一旦收到新数据就会继续循环(stream.MoveNext() ).

一旦它接收到新数据,它将调用一个函数,尽管这是在不同的线程中完成的

注意:我没有得到 Cross-Thread Exception,这是因为它在构建期间被禁用,并且在开发人员机器上测试是不可能的。

public static async Task ButtonStream()
{

    var rpc = buttonClient.buttonPressed(new ButtonsSubscription());
    try
    {
        using (rpc)
        {
            var stream = rpc.ResponseStream;
            while (await stream.MoveNext())
            {
                if (stream.Current.Id >= persistantDic.Count)
                {
                    int a = stream.Current.Id;
                    int b = persistantDic.Count;

                    //Console.WriteLine("{0} >= {1}", a,b);
                    throw new Exception("Something went wrong");
                }
                else
                {
                    buttonPressed = stream.Current.Id;
                    gRPCEvents.ButtonUpdates?.Invoke ();
                    Console.WriteLine("Invoked from thread: "+Thread.CurrentThread.ManagedThreadId);
                }
            }
        }
    }
    catch (RpcException e)
    {
        throw;
    }
}

ButtonUpdates?.Invoke 在 main(threadID 1) 中运行一个函数,当我按 F1(仅测试目的)时,我看到它的 运行 是线程 1 上的函数,但是当它被调用时运行 在线程 4(或 9,有时会更改)上运行。

编辑

主线程上的函数订阅了调用的委托,它将由线程 4 上的任务调用

已解决,

WaveEngine 非常友善,为我提供了一个简单的解决方案来连接到他们的主线程

WaveServices.Dispatcher.RunOnWaveThread(() =>
{
    //Any code here for execution
});