本当にここにこだわっています...私はXAMLページUIを持っており、ユーザーがUIと対話するたびに非同期関数を呼び出す必要があります。
私はネットワーキングのためのSignalRを使用します。同期UIスレッドからのコールバックで非同期メソッドを呼び出す
public static class ProtocolClient
{
private static HubConnection hubConnection;
private static IHubProxy protocolHubProxy;
public static async void connect(string server)
{
hubConnection = new HubConnection(server);
protocolHubProxy = hubConnection.CreateHubProxy("ProtocolHub");
protocolHubProxy.On<Body>("BodiesChanged", body =>
//call a callback to return body
);
await hubConnection.Start(); //wait for connection
}
public static async void sendTouch(Touch touch)
{
Body body = await protocolHubProxy.Invoke<Body>("GetBodyForTouch", touch);
//call a callback to return body
}
}
UI:
public sealed partial class MainPage : Page
{
[...]
private void Canvas_PointerPressed(object sender, PointerRoutedEventArgs e)
{
[...]
switch (ptrPt.PointerDevice.PointerDeviceType)
{
case Windows.Devices.Input.PointerDeviceType.Mouse:
if (ptrPt.Properties.IsLeftButtonPressed)
{
//call sendTouch
}
break;
default:
break;
}
[...]
}
}
私はUIを変更することができ、コールバックを必要としています。どうすればconnectとsendTouchをUIから呼び出してコールバックを渡すことができますか?
ありがとうございます。しかし、体オブジェクトをUIに渡すにはどうすればいいですか?
?これらの関数は異なるクラスにあります。 – pythonimus'SignalR'は扱っていませんが、メッセージが到着するたびに' body'が呼び出されたときに 'Start()'メソッドが返されていると仮定します。したがって、受信したメッセージをどこで扱うべきかについての誤解があります。 'on
'イベントから 'await hubConnection.Start()'の後にオブジェクトを '移動'する必要はありません。そこのメッセージを処理してください。 –あなたは正しいです。 BUTクラスProtocolClientはUI要素と何も関係がありません。 – pythonimus