I have a WCF service lib and client[Winform] that connect using netTCPbinding.
the client called a function Search(string txtSearch,string path)
and the server should send back the result, but i don't want the client to wait for results, i need the server to send it back Independently. so whenever the server send back an item, the client should add it to listView1 .
here's a little code of the client application, So how could i need to access listView1 from Callback
class if it's possible!
public partial class Form1 : Form
{
FileManagerClient client;
public Form1()
{
InitializeComponent();
InstanceContext ctx = new InstanceContext(new Callback());
client = new FileManagerClient(ctx);
}
}
class Callback : IFileManagerCallback
{
public void Folder(_Folder folder)
{
ListViewItem item = new ListViewItem();
item.Text = folder.Name;
item.ToolTipText = folder.Path;
item.Tag = item.ImageIndex;
item.Name = item.Text;
//Add item to listView1
}
public void File(_File file)
{
ListViewItem item = new ListViewItem();
item.Text = file.Name;
item.ToolTipText = file.Path;
item.Tag = item.ImageIndex;
item.Name = item.Text;
//Add item to listView1
}
}
Implement event
public partial class Form1 : Form
{
FileManagerClient client;
public Form1()
{
InitializeComponent();
Callback callback = new Callback();
//Subscribe event for notification
callback.OnDataReceivedEvent +=new Callback.OnDataReceived(callback_OnDataReceivedEvent);
InstanceContext ctx = new InstanceContext(callback);
client = new FileManagerClient(ctx);
}
private void callback_OnDataReceivedEvent(object sender, ListViewItem item)
{
//Add item here
}
}
class Callback : IFileManagerCallback
{
private delegate void OnDataReceived(object sender, ListViewItem item);
private OnDataReceived _dataReceivedHandler = null;
public event OnDataReceived OnDataReceivedEvent {
add { _dataReceivedHandler += value; }
remove { _dataReceivedHandler -= value; }
}
public void Folder(_Folder folder)
{
ListViewItem item = new ListViewItem();
item.Text = folder.Name;
item.ToolTipText = folder.Path;
item.Tag = item.ImageIndex;
item.Name = item.Text;
RaiseEvents(item);
//Add item to listView1
}
public void File(_File file)
{
ListViewItem item = new ListViewItem();
item.Text = file.Name;
item.ToolTipText = file.Path;
item.Tag = item.ImageIndex;
item.Name = item.Text;
RaiseEvents(item);
//Add item to listView1
}
private void RaiseEvents(ListViewItem item)
{
if (_dataReceivedHandler != null)
{
_dataReceivedHandler(this, item);
}
}
}