я много информации в этом вопросе, потому что я понятия не имею, что будет relaventWPF C# приложение будет замерзать весь мой компьютер когда-либо в 2-3 раза я бегу это
Выпуск:
Я имею проблема с программой, над которой я работаю, когда ее запускает, она закроет весь мой компьютер и не вернет ошибку (я совершенно неспособен делать что-то, что CTRL + ALT + DEL даже не работает). Эта программа принимает соединение от клиента android и atm клиент Android не настроен правильно, поэтому соединение отклоняется.
Вопрос:
Как я могу остановить мою программу от замерзания всей моей машины?
ГИПОТЕЗА:
У меня есть несколько теорий относительно того, что происходит, но не знаю, как их исправить. Я прочитал, что это может иметь какое-то отношение ко мне, когда я запускаю однопоточный процесс внутри моего асинхронного рабочего, но я не уверен, что сокет - это однопоточный процесс. Также я не совсем уверен, как я должен иметь дело с исключениями в workworker, поэтому я просто позволяю ему возвращаться к RunWorkerCompletedEventArgs, а затем извлекает сообщение об ошибке оттуда.
То, что я пробовал:
- Я пытался ставить попытку улавливает, где каждый последующее удаление попытки не ловит ничего, кажется, чтобы быть в состоянии захватить эту ошибку
- Я проверил журнал системы событий и ничего не появляется, кроме моего перезагружается после моего компьютера замерзает
- я попытался изолировать проблему, но это может произойти буквально в любой момент из программы запуска до при попытке подключения
Установка:
Я РУННЫ в программе из visual studio 2012 Professional на Windows 8 pro machine. Компьютер, на котором я работаю, имеет i7-3770K 3,50 ГГц и 32 ГБ оперативной памяти. Приложение, пытающееся установить соединение с моим, - это приложение для Android, а учетные данные неверны, когда он пытается подключиться. Visual Studio отключает мой основной жесткий диск и создает проект на другом диске.
Закрытие:
Со всем, что сказал бы кто-нибудь, пожалуйста, готовы мне помочь? Если вам нужна дополнительная информация, я буду рад предоставить ее, пожалуйста, спросите.
Основной метод:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
namespace Server
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class SourceServer : Window
{
private BackgroundWorker worker = new BackgroundWorker();
public SourceServer()
{
InitializeComponent();
StartListeningForConnections();
}
private void StartListeningForConnections()
{
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
worker.WorkerReportsProgress = true;
if (worker.IsBusy != true)
{
worker.RunWorkerAsync();
}
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
worker.ReportProgress(0, "Source server version 0.0.0.1ib started");
LoginServer oLoginServer = new LoginServer();
oLoginServer.StartListening(worker);
}
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
try
{
lvOutput.Items.Add(e.UserState.ToString());
}
catch (Exception exception)
{
lvOutput.Items.Add(exception.StackTrace);
}
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
System.IO.File.WriteAllText(Environment.CurrentDirectory + @"\log.txt", e.Error.StackTrace + " /n " + e.Error.Message);
}
else
{
MessageBox.Show("Error was null");
}
worker.Dispose();
}
}
}
SSL Разъем соединения:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Windows;
using System.Windows.Controls;
using System.ComponentModel;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using MySql.Data.MySqlClient;
using System.IO;
namespace Server
{
public class LoginServer
{
// Incoming data from the client.
public static string data = null;
public static X509Certificate serverCertificate = null;
public delegate void UpdateListView(ListView oOutput);
public void StartListening(BackgroundWorker worker)
{
// Data buffer for incoming data.
byte[] bytes = new Byte[1024];
// Establish the local endpoint for the socket.
IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[1];
serverCertificate = X509Certificate.CreateFromCertFile(@"server.crt");
TcpListener oServer = new TcpListener(ipAddress, 12345);
// Bind the socket to the local endpoint and
// listen for incoming connections.
// Start listening for connections.
while (true)
{
Thread.Sleep(100);
worker.ReportProgress(0, "Waiting for connection....");
// Program is suspended while waiting for an incoming connection.
//Socket handler = listener.Accept();
oServer.Start();
TcpClient oClient = oServer.AcceptTcpClient();
Stream oStream = oClient.GetStream();
SslStream oSSLStream = new SslStream(oStream);
data = null;
// An incoming connection needs to be processed.
string sUsername = "place holder";
string sPassword = "place holder";
while (true)
{
bytes = new byte[1024];
int bytesRec = oSSLStream.Read(bytes, 0, bytes.Length);
data += Encoding.ASCII.GetString(bytes, 0, bytesRec);
string[] sCredentials = data.Split("|".ToCharArray()[0]);
sUsername = sCredentials[0];
sPassword = sCredentials[1];
if (data.IndexOf("<EOF>") > -1)
{
break;
}
}
// Show the data on the console.
worker.ReportProgress(0, "Connection Recieved : ");
worker.ReportProgress(0, "Username: " + sUsername);
worker.ReportProgress(0, "Password: " + sPassword);
worker.ReportProgress(0, "");
// Echo the data back to the client.
byte[] msg;
if (sUsername.Equals("test") && sPassword.Equals("test"))
{
msg = Encoding.ASCII.GetBytes("approved<EOF>\n");
worker.ReportProgress(0, "approved");
oSSLStream.Write(msg, 0, msg.Length);
}
else
{
msg = Encoding.ASCII.GetBytes("rejected<EOF>\n");
worker.ReportProgress(0, "rejected");
oSSLStream.Write(msg, 0, msg.Length);
}
}
}
public void VerifyUser()
{
}
}
}
Спасибо, что я сделал это изменение в моем цикле while, но мой компьютер все равно полностью закроется после запуска его пару раз. –
Сделайте мне одолжение и добавьте Thread.Sleep к этому циклу - только ради здравого смысла - и посмотрите, все ли он блокируется ... – DigitalJedi805
Следующим моим самым лучшим предложением было бы создать метод, который открывается, добавляет, сбрасывает и закрывает файл журнала - и на столько же времени, сколько вы можете обнажить - добавьте сообщение журнала; просто отслеживать, насколько далеко вы достигли своего исполнения. – DigitalJedi805