pub0.zzc와 같은 파일에 메시지를 저장하는 채팅 프로그램을 만들면 해당 파일을 사용하는 모든 컴퓨터가 해당 파일이있는 하드 드라이브에 연결되므로 정상적으로 작동합니다. 메소드 data.Chat.Read (MessageTypes type, string Channel) 무한 루프는 메시지를 리턴 할 때까지 try catch 문을 반복합니다. 나는 이것을 사용했고 완벽하게 작동합니다. 그러나 코드를 관리하기가 어려웠으므로 텍스트 상자를 창에 넣고 매번 코드를 사용하는 대신 사용자 컨트롤 (MessageViewer)을 만들었습니다. 그것은 잘 작동, 다시 한번 그것을 실행할 때마다하지만, 때마다 내가 컨트롤을 수용하는 창에서 디자이너를 사용하려고 VS를 동결. 문제가 창을 지울 때 컨트롤을 삭제하면 문제가 발생하지 않습니다. 그래서 여기Windows 양식 응용 프로그램 디버그
코드 전에, 잘 작동 나는 가능한 오류 (RefreshMessages에서 생각)과 Refresher_Tick (...)
Refresher.Stop()와 .Start()는 또한되지 않습니다 :
private void Refresher_Tick(object sender, EventArgs e)
{
Refresher.Stop();
int RefreshRate = 4;
bool Live = true;
if (RefreshRateChoice == "Manual")
{
Live = false;
RefreshRate = 1;
}
else if (RefreshRateChoice == "4 (Default)")
{
Live = true;
RefreshRate = 4;
}
else
{
Live = true;
RefreshRate = Convert.ToInt32(RefreshRateChoice);
}
if (data.Chat.Read(MessageType, ChannelChoice) != ContentPresenter.Text && Live)
{
RefreshMessages();
}
Refresher.Interval = RefreshRate;
Refresher.Start();
}
public void RefreshMessages() {
if (data.Chat.Read(MessageType, ChannelChoice) != ContentPresenter.Text)
{
ContentPresenter.Text = data.Chat.Read(MessageType, ChannelChoice);
}
}
은 당신이 그것을 필요로하는 경우 :
public static string Read(MessageTypes Type, string Channel)
{
string Loc;
if (Type == MessageTypes.Public && (Channel == "1" || Channel == "2"))
{
return "Can not view this channel, only post to it.";
}
if (Type == MessageTypes.Public)
{
Loc = data.AssetsFolder + "\\pub" + Channel + ".zzc";
}
else if (Type == MessageTypes.Private)
{
Loc = data.AssetsFolder + "\\" + Channel + ".zzpc";
}
else if (Type == MessageTypes.Game)
{
Loc = data.AssetsFolder;
}
else
{
Loc = data.AssetsFolder;
}
while (true)
{
try
{
String MessageList = "";
StreamReader MessageReader = new StreamReader(Loc);
string EncMessages = MessageReader.ReadToEnd();
MessageReader.Dispose();
List<string> EncMsgList = EncMessages.Split(';').ToList();
for (int i = 1; i < EncMsgList.Count; i++)
{
MessageList += data.Encodings.Decrypt(EncMsgList[i], Palettes.Message) + "\n";
}
return MessageList;
}
catch
{
// Do nothing
}
}
}
이미 파일을 사용중인 사람의 예외를 확인하면 다른 예외가 발생하지 않도록해야합니다. 내가 사용한 결과는 DesignMode가 참인지 거짓인지를 확인하고 타이머와 RefreshMessages를 실행하지 않는 if 문이 다른 질문에있는 사람처럼 제안했는지, 실제로 작동하는지는 알 수 없다는 것입니다. – Oztaco