从 SignalR 客户端打开 WinForm
Open WinForm from SignalR Client
我用过这个示例 [GitHub SignalR 示例]
https://github.com/nthdeveloper/SignalRSamples
它使用 winforms 作为 signalR 服务器
它使用两个客户端 winforms 和一个 javascript
它在文本框中附加客户端消息
private void SimpleHub_MessageReceived(string senderClientId, string message)
{
//One of the clients sent a message, log it
this.BeginInvoke(new Action(() =>
{
string clientName = _clients.FirstOrDefault(x => x.Id == senderClientId)?.Name;
writeToLog($"{clientName}:{message}");
}));
}
我需要打开一个基于消息的表单
private void SimpleHub_MessageReceived(string senderClientId, string message)
{
//One of the clients sent a message, log it
this.BeginInvoke(new Action(() =>
{
string clientName = _clients.FirstOrDefault(x => x.Id == senderClientId)?.Name;
switch (message)
{
case "form1":
Form1 frm = new Form1();
frm.Show();
break;
case "form2":
Form2 frm = new Form();
frm.Show();
break;
default:
// code block
break;
}
}));
}
我已经尝试过表单打开并保持加载的代码我无法与之交互
缺少什么
因为 Form.Show
不会阻塞导致它立即超出范围。
您需要使用Form.ShowDialog
。这将阻止允许表单的生命周期在超出范围之前完成。
话虽这么说,试试这个:
switch (message)
{
case "form1":
using(var frm = new Form1())
{
frm.ShowDialog(this);
}
break;
case "form2":
using(var frm = new Form2())
{
frm.ShowDialog(this);
}
break;
default:
// code block
break;
}
我用过这个示例 [GitHub SignalR 示例]
https://github.com/nthdeveloper/SignalRSamples
它使用 winforms 作为 signalR 服务器
它使用两个客户端 winforms 和一个 javascript
它在文本框中附加客户端消息
private void SimpleHub_MessageReceived(string senderClientId, string message)
{
//One of the clients sent a message, log it
this.BeginInvoke(new Action(() =>
{
string clientName = _clients.FirstOrDefault(x => x.Id == senderClientId)?.Name;
writeToLog($"{clientName}:{message}");
}));
}
我需要打开一个基于消息的表单
private void SimpleHub_MessageReceived(string senderClientId, string message)
{
//One of the clients sent a message, log it
this.BeginInvoke(new Action(() =>
{
string clientName = _clients.FirstOrDefault(x => x.Id == senderClientId)?.Name;
switch (message)
{
case "form1":
Form1 frm = new Form1();
frm.Show();
break;
case "form2":
Form2 frm = new Form();
frm.Show();
break;
default:
// code block
break;
}
}));
}
我已经尝试过表单打开并保持加载的代码我无法与之交互 缺少什么
因为 Form.Show
不会阻塞导致它立即超出范围。
您需要使用Form.ShowDialog
。这将阻止允许表单的生命周期在超出范围之前完成。
话虽这么说,试试这个:
switch (message)
{
case "form1":
using(var frm = new Form1())
{
frm.ShowDialog(this);
}
break;
case "form2":
using(var frm = new Form2())
{
frm.ShowDialog(this);
}
break;
default:
// code block
break;
}