我正在製作一個聊天程序,將消息保存在像pub0.zzc這樣的文件中,所有使用它的計算機都將連接到這些文件所在的硬盤驅動器,所以它很好。方法data.Chat.Read(MessageTypes類型,字符串Channel)通過try catch語句無限循環,直到它返回消息。我之前使用過這個並且完美地工作。但是,我的代碼很難管理,因此我不是每次都將文本框放入窗口並使用代碼,而是創建了一個用戶控件(MessageViewer)。它運行良好,我再次運行它時,但它凍結VS,每當我嘗試使用控制器窗口上的設計師。該probelm不是窗口,因爲當我刪除控制它的罰款。我認爲可能出現的錯誤是在RefreshMessages()和Refresher_Tick(...)調試Windows窗體應用程序
Refresher.Stop()和。開始()也沒有它,工作得很好以前
所以這裏是代碼:
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是true還是false,並且不運行計時器和RefreshMessages,就像另一個問題中的人所建議的那樣,如果它是真的,它不運行,這是有效的。 – Oztaco 2012-03-18 02:27:31