私は現在、SignalRクライアントとして動作するフォームレスC#アプリケーションを作成しています。目標は、クライアントがバックグラウンドでサイレントモードで実行され、SignalRによってトリガーされたときにフォームを表示することです。C#フォームレスアプリケーションから別のスレッドでフォームを作成します。
現在、GUIを表示する際に問題が発生しています。 -
private static void ShowForm()
{
var alertForm = new AlertForm();
alertForm.Show();
}
これが最初で正常に動作します:SignalRを非同期に実行する必要がある、と私は非同期Main()
メソッドを持つことができないので、私は現在、これはShowFormを方法であるTask.ContinueWith
static void Main()
{
_url = "https://localhost:44300";
var hubConnection = new HubConnection(_url);
var hubProxy = hubConnection.CreateHubProxy("HubName");
hubConnection.Start().ContinueWith(task =>
{
if (task.IsFaulted)
{
MessageBox.Show("There was an error opening the connection");
}
else
{
Trace.WriteLine("Connection established");
}
}).Wait();
hubProxy.On("showForm", showForm);
Application.Run();
}
を使用する必要がありますサーバーからshowForm
を呼び出すと、ハブに接続し、showForm()
メソッドを呼び出します。ただし、フォームはレンダリングされず、応答なしとして表示されません。 .ShowDialog
を呼び出すと、フォームが実際にレンダリングされますが、SignalRクライアントはハブの受信を停止します。
したがって、フォームを別のスレッドで実行し、SignalRクライアントの実行をブロックしないようにフォームを表示するにはどうすればよいですか?
ありがとう、ありがとう! – TeknoVenus