我正在寻找一种方法在不同的线程上调用一个函数。
我们正在使用一个服务器(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上的任务调用
答案 0 :(得分:0)
解决了,
WaveEngine非常友好地为我提供了一个简单的解决方案来连接他们的主线程
WaveServices.Dispatcher.RunOnWaveThread(() =>
{
//Any code here for execution
});