PDA

View Full Version : نشان ندادن اطلاعات در لیست باکس



bpzone
دوشنبه 09 فروردین 1389, 22:16 عصر
با سلام به همگی دوستان
من یک برنامه کلاینت سرور نوشتم و توی قسمت سرور از چند نخی استفاده کردم و با استفاده از Delegate به لیست باکس موجود در فرم دسترسی پیدا کردم
اشکالی که وجود داره این هست که اطلاعاتی رو که به لیست باکس اضافه میکنم رو نشون نمیده ... دستور مربوط به اضافه کردن آیتم جدید به لیست باکس اجرا میشه ولی چیزی روی صفحه نشون داده نمیشه




WriteLog wl1 = new WriteLog("Waiting for Clients....");
System.Threading.Thread th = new System.Threading.Thread(new System.Threading.ThreadStart(wl1.Writelistbox));
th.Start();

بدنه اصلی کلاسی که بصورت نخ اجرا میشود



class WriteLog : Server_Main
{
private delegate void Write_Log();

string data;

public WriteLog(string s)
{
data = s;
}

public void Writelistbox()
{
if (lb_Log.InvokeRequired == true)
{
Write_Log sd = new Write_Log(Writelistbox);
this.Invoke(sd, new Object[] { data });
}
else
{
lb_Log.Items.Add(data); // lb_Log --> ListBox
}
}
}

bpzone
سه شنبه 10 فروردین 1389, 09:51 صبح
سلامی مجدد

حل شد قضیه

اینم کد ، امیدوارم که به درد دوستان بخوره



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace Server_Socket
{
public delegate void Write_Log(string message);

public partial class Server_Main : Form
{

private const int BUFSIZE = 1024;
private const int BACKLOG = 5;
private int serverPort;
Socket server = null;
byte[] buffer = new byte[BUFSIZE];
Thread Listen;
Thread node;

Write_Log wl;


public Server_Main()
{
InitializeComponent();
wl = new Write_Log(this.Write_Message);
}

private void Write_Message(string message)
{
if (lb_Log.InvokeRequired == true)
{
Write_Log sd = new Write_Log(Write_Message);
this.Invoke(sd, new Object[] { message });
}
else
{
lb_Log.Items.Add(message);
}
}

private void btn_Exit_Click(object sender, EventArgs e)
{
wl("trying to Close the Connection...");
try
{
if (server != null && server.Connected)
{
server.Close();
}

Thread.CurrentThread.Abort();
}
catch (Exception ex)
{
wl("Eror in Exit() method. " + ex.Message);
Application.Exit();
}
}

private void btn_listen_Click(object sender, EventArgs e)
{

serverPort = int.Parse(txt_Port.Text);

try
{
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Bind(new IPEndPoint(IPAddress.Loopback, serverPort));
server.Listen(BACKLOG);
Listen = new Thread(new ThreadStart(Listening));
Listen.Start();
btn_listen.Enabled = false;
}
catch (SocketException se)
{
wl(se.ErrorCode + ": " + se.Message);
Environment.Exit(se.ErrorCode);

Thread.CurrentThread.Abort();
}

}

void Listening()
{
while (true)
{
try
{
wl("Waiting for Clients....");
Socket s = server.Accept();
ClientServer cl = new ClientServer(s, wl);

wl("A Client Connected with IP=" + s.RemoteEndPoint.ToString());

node = new Thread(new ThreadStart(cl.StartServing));
node.Start();
}
catch (Exception ex)
{
wl("Eror in Serving() Listening. " + ex.Message);
if (node != null && node.ThreadState == ThreadState.Running)
{
Thread.CurrentThread.Abort();
}
if (server.Connected)
{
server.Shutdown(SocketShutdown.Both);
server.Close();
Application.Exit();
}
}
}
}

private void Server_Main_FormClosing(object sender, FormClosingEventArgs e)
{
System.Environment.Exit(0);
}
}

class ClientServer
{
Socket client;
byte[] data = new byte[1024];
string answer;
Write_Log wl;

public ClientServer(Socket s, Write_Log w)
{
client = s;
wl = w;
}
public void StartServing()
{
try
{

data = Encoding.ASCII.GetBytes("Connect to Server");
client.Send(data);

while (true)
{
int num = client.Receive(data);
string s = Encoding.ASCII.GetString(data, 0, num);
answer = " A request from " + client.RemoteEndPoint.ToString() + "# the Request is: " + s;
wl(answer);
data = Encoding.ASCII.GetBytes("Receive");
client.Send(data, 0, data.Length, SocketFlags.None);
}
}
catch (Exception ex)
{
if (ex.Message == "An existing connection was forcibly closed by the remote host")
{
wl(client.RemoteEndPoint.ToString() + " Closed.");
}

client.Close(); Thread.CurrentThread.Abort();

Application.Exit();
}
}
}
}