PDA

View Full Version : مشکل در تغییر مقدار یک کنترل در متدی که به ترد نسبت داده شده



wolf_majid
شنبه 24 فروردین 1392, 23:29 عصر
سلام
کد زیر رو دقیقا" از روی کتاب نوشتم
public partial class frmServer : Form
{
public frmServer()
{
InitializeComponent();
readThread = new Thread(new ThreadStart(RunServer));
readThread.Start();
}

private Socket connection;
private Thread readThread;
private NetworkStream socketStream;
private BinaryWriter writer;
private BinaryReader reader;

public void RunServer()
{
TcpListener listener;
int counter = 1;

try
{
listener = new TcpListener(5000);
listener.Start();

while (true)
{
displayTextBox.Text = "waiting for connection\r\n";
connection = listener.AcceptSocket();
socketStream = new NetworkStream(connection);

writer = new BinaryWriter(socketStream);
reader = new BinaryReader(socketStream);

displayTextBox.Text += "Connection " + counter + " received.\r\n";
writer.Write("SERVER>>> Connection Succeful");
inputTextBox.ReadOnly = false;
string theReply = "";

do
{
try
{
theReply = reader.ReadString();
displayTextBox.Text += "\r\n" + theReply;
}
catch (Exception)
{
break;
}

} while (theReply.ToLower() != "client>>> terminate" &&
connection.Connected);

displayTextBox.Text += "\r\nUser Terminated Connection";

inputTextBox.ReadOnly = true;
writer.Close();
reader.Close();
socketStream.Close();
connection.Close();

++counter;

}
}
catch (Exception error)
{
MessageBox.Show(error.ToString());
}
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Environment.Exit(Environment.ExitCode);
}



private void inputTextBox_KeyDown(object sender, KeyEventArgs e)
{
try
{
if (e.KeyCode == Keys.Enter && connection != null)
{
writer.Write("SERVER>>> " + inputTextBox.Text);
displayTextBox.Text += "\r\nSERVER>>> " + inputTextBox.Text;

if (inputTextBox.Text.ToLower() == "terminate")
connection.Close();

inputTextBox.Clear();
}
}
catch (SocketException)
{

displayTextBox.Text += "\nError Writing Object";
}
}
}

ولی موقع اجرا خطای فایل پیوست شده رو میده
نکته جالب اینجاست که موقعی که برنامه را با F11 اجرا میکنم مشکلی نداره ولی اجرا در حالت عادی خطا میده

linux
یک شنبه 25 فروردین 1392, 00:09 صبح
خطای کراس تردینگ برای این اتفاق افتاده که شما در تردی که برای runserver ساختی سعی در دسترسی به textbox داری که در ترد اصلی برنامه ساخته شده
اینجا را مطالعه کنید
http://www.codeproject.com/Articles/37642/Avoiding-InvokeRequired