henkjan111
Gebruiker
- Lid geworden
- 9 jan 2011
- Berichten
- 221
Hallo,
Ik probeer een (multi) client server applicatie te maken in C#. Het lukt allemaal vrij aardig. Totdat ik simpel een ProgressBar een value wil geven (met een label lukt het wel). Dan krijg ik deze foutmelding:
Dit is de client code:
Ik probeer een (multi) client server applicatie te maken in C#. Het lukt allemaal vrij aardig. Totdat ik simpel een ProgressBar een value wil geven (met een label lukt het wel). Dan krijg ik deze foutmelding:
Code:
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll
Additional information: Het is niet toegestaan een bewerking uit te voeren via verschillende threads: er werd vanaf een andere thread toegang gekregen tot het besturingselement Progress_Startup dan de thread waarop het element is gemaakt.
Dit is de client code:
Code:
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 Globbic_Workstation
{
public partial class Frm_StartupWS : Form
{
private Socket _clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
byte[] receivedBuf = new byte[1024];
private void ReceiveData(IAsyncResult ar)
{
Socket socket = (Socket)ar.AsyncState;
int received = socket.EndReceive(ar);
byte[] dataBuf = new byte[received];
Array.Copy(receivedBuf, dataBuf, received);
lb_stt.Text = (Encoding.ASCII.GetString(dataBuf));
if (Encoding.ASCII.GetString(dataBuf) == "Start")
{
Progress_Startup.Value = 100;
}
_clientSocket.BeginReceive(receivedBuf, 0, receivedBuf.Length, SocketFlags.None, new AsyncCallback(ReceiveData), _clientSocket);
}
private void SendLoop()
{
while (true)
{
byte[] receivedBuf = new byte[1024];
int rev = _clientSocket.Receive(receivedBuf);
if (rev != 0)
{
byte[] data = new byte[rev];
Array.Copy(receivedBuf, data, rev);
lb_stt.Text = ("Received: " + Encoding.ASCII.GetString(data));
}
else _clientSocket.Close();
}
}
private void LoopConnect()
{
int attempts = 0;
while (!_clientSocket.Connected)
{
try
{
attempts++;
_clientSocket.Connect(IPAddress.Loopback, 55555);
}
catch (SocketException)
{
MessageBox.Show("Connection attempts: " + attempts.ToString());
}
}
MessageBox.Show("Connected!");
}
public Frm_StartupWS()
{
InitializeComponent();
}
private void Frm_StartupWS_Load(object sender, EventArgs e)
{
LoopConnect();
_clientSocket.BeginReceive(receivedBuf, 0, receivedBuf.Length, SocketFlags.None, new AsyncCallback(ReceiveData), _clientSocket);
byte[] buffer = Encoding.ASCII.GetBytes("Workstation");
_clientSocket.Send(buffer);
}
private void timer1_Tick(object sender, EventArgs e)
{
}
}
}