System.ObjectDisposedException: Доступ к ликвидированному объекту невозможен - C# (234898)

Узнай цену своей работы

Формулировка задачи:

Смастерил Irc Client, но при закрытии формы с чатом вылетает

System.ObjectDisposedException: Доступ к ликвидированному объекту невозможен

Прошу помочь, вод, собственно, сам код.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Diagnostics;
  10. using System.IO;
  11. using System.Configuration;
  12. using System.Collections.Specialized;
  13. using TechLifeForum;
  14. using System.Threading;
  15. namespace WindowsFormsApplication44
  16. {
  17. public partial class Form4 : Form
  18. {
  19. IrcClient client;
  20. public string a;
  21. public Form4()
  22. {
  23. InitializeComponent();
  24. txtName.ReadOnly = true;
  25. this.MouseDown += new MouseEventHandler(Form4_MouseDown);
  26. }
  27. void Form4_MouseDown(object sender, MouseEventArgs e)
  28. {
  29. base.Capture = false;
  30. Message m = Message.Create(base.Handle, 0xa1, new IntPtr(2), IntPtr.Zero);
  31. this.WndProc(ref m);
  32. }
  33. private void Form4_Load(object sender, EventArgs e)
  34. {
  35. btnConnect_Click(sender, e);
  36. }
  37.  
  38. private delegate void _UpdateUsers(string[] userlist);
  39. private void UpdateUsers(string[] userlist)
  40. {
  41. #region CrossThreadCheck
  42. if (InvokeRequired)
  43. {
  44. this.Invoke(new _UpdateUsers(UpdateUsers), (object)userlist);
  45. return;
  46. }
  47. #endregion
  48. lstNames.Items.Clear();
  49. foreach (string u in userlist)
  50. lstNames.Items.Add(u);
  51. }// UpdateUsers
  52. private void UserJoined(string user)
  53. {
  54. ShowMessage("*" + user + " присоединился к комнате чата");
  55. }// UserJoined
  56. private void UserLeft(string user)
  57. {
  58. ShowMessage("*" + user + " покинул комнату чата");
  59. }// UserLeft
  60. private void ChannelMessage(string user, string message)
  61. {
  62. ShowMessage("<" + user + ">: " + message);
  63. }// ChannelMessage
  64. private void NoticeMessage(string user, string message)
  65. {
  66. ShowMessage("<--Заметка--> " + user + ": " + message);
  67. }// NoticeMessage
  68. private void PrivateMessage(string user, string message)
  69. {
  70. ShowMessage("<--Личное сообщение--> от " + user + ">: " + message);
  71. }// PrivateMessage
  72. private delegate void _ShowMessage(string message);
  73. private void ShowMessage(string message)
  74. {
  75. #region CrossThreadCheck
  76. if (InvokeRequired)
  77. {
  78. this.Invoke(new _ShowMessage(ShowMessage), message);
  79. return;
  80. }
  81. #endregion
  82. rtbWindow.AppendText("\n" + message);
  83. rtbWindow.ScrollToCaret();
  84. }
  85.  
  86. private void Connect()
  87. {
  88. // connect to the irc server
  89. client.Connect("#LittleHlp");
  90. }// Connect
  91. private void txtSend_KeyPress(object sender, KeyPressEventArgs e)
  92. {
  93. if (e.KeyChar == 13) // enter key
  94. {
  95. e.Handled = true;
  96. btnSend_Click(sender, e);
  97. }
  98. }
  99.  
  100. private void AddEvents()
  101. {
  102. // Save settings event
  103. // events triggered by the client
  104. client.UpdateUsers += new UpdateUserListEventDelegate(UpdateUsers);
  105. client.UserJoined += new UserJoinedEventDelegate(UserJoined);
  106. client.UserLeft += new UserLeftEventDelegate(UserLeft);
  107. client.ChannelMessage += new ChannelMesssageEventDelegate(ChannelMessage);
  108. client.NoticeMessage += new NoticeMessageEventDelegate(NoticeMessage);
  109. client.PrivateMessage += new PrivateMessageEventDelegate(PrivateMessage);
  110. client.Disconnected += new DisconnectedEventDelegate(Disconnect);
  111. client.ServerMessage += new ServerMessageEventDelegate(ShowMessage);
  112. }// AddEvents
  113. private void timer1_Tick(object sender, EventArgs e)
  114. {
  115. usrNum.Text = lstNames.Items.Count.ToString();
  116. }
  117. private void pictureBox1_Click(object sender, EventArgs e)
  118. {
  119. Disconnect();
  120. this.Close();
  121. }
  122. private void pictureBox2_Click(object sender, EventArgs e)
  123. {
  124. this.WindowState = FormWindowState.Minimized;
  125. }
  126. private void pictureBox1_MouseEnter(object sender, EventArgs e)
  127. {
  128. pictureBox1.Image = Properties.Resources.Close;
  129. }
  130. private void pictureBox1_MouseLeave(object sender, EventArgs e)
  131. {
  132. pictureBox1.Image = Properties.Resources.Clos;
  133. }
  134. private void pictureBox2_MouseEnter(object sender, EventArgs e)
  135. {
  136. pictureBox2.Image = Properties.Resources.m2;
  137. }
  138. private void pictureBox2_MouseLeave(object sender, EventArgs e)
  139. {
  140. pictureBox2.Image = Properties.Resources.m1;
  141. }
  142. private void btnSend_Click(object sender, EventArgs e)
  143. {
  144. if (chkRaw.Checked)
  145. {
  146. client.SendRAW("PRIVMSG " + txtName.Text + " " + txtSend.Text.Trim());
  147. ShowMessage("<--Личное сообщение--> к " + txtName.Text + ">: " + txtSend.Text);
  148. }
  149. else
  150. {
  151. client.SendMessage(txtSend.Text.Trim());
  152. ShowMessage("<" + client.Nick + ">: " + txtSend.Text);
  153. }
  154. txtSend.Clear();
  155. txtSend.Focus();
  156. }
  157. private void btnConnect_Click(object sender, EventArgs e)
  158. {
  159. Disconnect();
  160. Form2 main = this.Owner as Form2;
  161. a = main.label1.Text;
  162. if (a == "Chesko")
  163. {
  164. txtName.ReadOnly = false;
  165. txtSend.Text = "";
  166. txtName.BackColor = System.Drawing.SystemColors.Window;
  167. txtName.ForeColor = System.Drawing.SystemColors.WindowText;
  168. }
  169. if (client != null)
  170. {
  171. client.Disconnect();
  172. return;
  173. }
  174. client = new IrcClient("zoidberg.centralchat.net", 6667);
  175. client.Nick = a;
  176. AddEvents();
  177. Thread t = new Thread(Connect);
  178. t.IsBackground = true;
  179. t.Start();
  180. btnSend.Visible = true;
  181. }
  182. private void lstNames_SelectedIndexChanged(object sender, EventArgs e)
  183. {
  184. string name = lstNames.SelectedItem.ToString();
  185. if (name.IndexOf("@") >-1 | name.IndexOf("~") >-1)
  186. {
  187. txtName.Text = name.Remove(0, 1);
  188. }
  189. else
  190. {
  191. txtName.Text = name;
  192. }
  193. if (name == "@ChanServ")
  194. {
  195. txtName.Text = "";
  196. MessageBox.Show("Невозможно отправить личное сообщение данному пользователю");
  197. }
  198. }
  199. private void Disconnect()
  200. {
  201. if (client != null)
  202. {
  203. client.Disconnect();
  204. client = null;
  205. }
  206. }
  207. }
  208. }

Решение задачи: «System.ObjectDisposedException: Доступ к ликвидированному объекту невозможен»

textual
Листинг программы
  1. private void DeleteEvents()
  2.         {
  3.             client.UpdateUsers -= new UpdateUserListEventDelegate(UpdateUsers);
  4.             client.UserJoined -= new UserJoinedEventDelegate(UserJoined);
  5.             client.UserLeft -= new UserLeftEventDelegate(UserLeft);
  6.             client.ChannelMessage -= new ChannelMesssageEventDelegate(ChannelMessage);
  7.             client.NoticeMessage -= new NoticeMessageEventDelegate(NoticeMessage);
  8.             client.PrivateMessage -= new PrivateMessageEventDelegate(PrivateMessage);
  9.             client.Disconnected -= new DisconnectedEventDelegate(Disconnect);
  10.             client.ServerMessage -= new ServerMessageEventDelegate(ShowMessage);
  11.         }// DeleteEvents

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы