#c# #winforms #webforms #signalr-2
#c# #winforms #веб-формы #signalr-2
Вопрос:
Я размещаю сервер SignalR на ASP.net веб-сайт и, исходя из этого, я хочу открыть FolderBrowserDialog в клиентском приложении WinForms. Сервер и клиент подключаются правильно, и я даже получаю сообщение на стороне клиента, но когда я пытаюсь открыть FolderBrowserDialog в новом потоке, он просто не открывает его и ничего не делает после этого.
Это код для отправки сообщения из WebForms:
public void sendToSpecific(string name, string message, string to)
{
// Call the broadcastMessage method to update clients.
Clients.Caller.broadcastMessage(name, message);
Clients.Client(dic[to]).broadcastMessage(name, message);
}
Код Winforms является:
private string _selectedFolder;
HubConnection hubConnection;
IHubProxy hubProxy;
public Form1()
{
InitializeComponent();
hubConnection = new HubConnection("http://localhost:49335");
hubProxy = hubConnection.CreateHubProxy("ChatHub");
hubProxy.On<string, string>("broadcastMessage", (name, message) => checkMessage(message));
hubConnection.Start().Wait();
hubProxy.Invoke("Notify", "Console app", hubConnection.ConnectionId);
}
private void checkMessage(string message)
{
if (message == "Open")
{
var t = new Thread((ThreadStart)(() =>
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.RootFolder = System.Environment.SpecialFolder.MyComputer;
fbd.ShowNewFolderButton = true;
if (fbd.ShowDialog() == DialogResult.Cancel)
_selectedFolder = "Cancelled";
else
{
_selectedFolder = fbd.SelectedPath;
}
}));
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
lstMessages.Items.Add(_selectedFolder);
hubProxy.Invoke("Send", "Console app", _selectedFolder).Wait();
}
}
Кто-нибудь, пожалуйста, может сказать, что я делаю не так, я также установил [STAThread] перед static void Main().
Комментарии:
1. learn.microsoft.com/en-us/dotnet/framework/winforms/controls/…
2. @LexLi Спасибо за ответ, но получаю ту же ошибку после использования обоих примеров в предоставленной ссылке.
3. @LexLi Внесение некоторых изменений во второй пример «Использовать метод вызова с делегатом» выполнило работу за меня, проверив его, я скоро загружу код. Спасибо за это, приятель.