我正试图弄清楚如何从我的WCF回调类:MyCallBack中访问我的GUI类:WinClient中的方法。方法MyCallBack.JoinServiceCallback(string message)
正在运行,例如,如果我使用MessageBox.Show(message);
它可以正常工作。
我在GUI类中有一个方法SetLabelMsg(string message){}
。但我无法弄清楚如何从回调类访问它。我对C#比较新,我一直在查看Delegate和threads并调用它。但我似乎无法连接点。希望有人能够帮助我!
//this method should change te text of the GUI label
public class MyCallBack : IServiceCallback
{
//this method should change the text of the GUI label
public void JoinServiceCallback(string message)
{
MessageBox.Show(message + " joined the service");
}
}
public partial class WinClient : Form
{
public void SetLabelMsg(string message)
{
lblMsg.Text = message;
}
}
答案 0 :(得分:1)
我得到了一位同学的大力帮助。
public class MyCallBack : IServiceCallback
{
private static Action<string> _changeText = null;
public static void SetDelegate(Action<string> nAction)
{
_changeText = nAction;
}
public void JoinServiceCallback(string message)
{
if(_changeText != null)
{
_changeText(message);
}
}
}
public partial class WinClient : Form
{
public WinClient(Customer customer)
{
MyCallBack.SetDelegate(SetLabelMsg);
public void SetLabelMsg(string message)
{
lblMsg.Text = message;
}
}
}
答案 1 :(得分:0)
如果我根据提供的信息正确理解了问题。我会定义一个可以收到消息的delegate
。然后定义在event
类中使用它的MyCallBack
。
/// <summary>Represents the method that can recieve a message.</summary>
/// <param name="message">The message.</param>
internal delegate void SendMessage(string message);
/// <summary>Occurrs when the JoinServiceCallback method is invoked.</summary>
public event SendMessage AfterJoinServiceCallback;
表单可以附加到AfterJoinServiceCallback
上的JoinServiceCallback
事件,然后if (AfterJoinServiceCallback != null)
{
AfterJoinServiceCallback(message)
}
可以举起活动。
message
### BEGIN EDIT ###
我认为问题可能是我的原始示例在委托声明中定义了2个参数,但调用只传递了JoinServiceCallback
。
我很高兴您有一些工作要做,但是,如果您在UI中有多个位置需要在调用JoinServiceCallback
时收到通知,那么您应该真正关注Using Delegates (C# Programming Guide)。使用委托,public partial class WinClient : Form
{
public WinClient()
{
InitializeComponent();
// Attach the "SetLabelMsg" method to the event
MyCallBack.AfterJoinServiceCallback += SetLabelMsg;
// Attach the "ShowMessage" method to the event
MyCallBack.AfterJoinServiceCallback += ShowMessage;
}
private void SetLabelMsg(string message)
{
if (!string.IsNullOrEmpty(message))
{
// Update the status label
lblMsg.Text = string.Format("Time: {1}\t\tMessage: {0}", message, DateTime.Now);
}
}
private void ShowMessage(string message)
{
if (!string.IsNullOrEmpty(message))
{
// Add the message to a listbox of all messages
listLog.Items.Add(string.Format("Time: {1}\t\tMessage: {0}", message, DateTime.Now));
}
}
}
public class MyCallBack : IServiceCallback
{
public delegate void SendMessage(string message);
public static event SendMessage AfterJoinServiceCallback;
public void JoinServiceCallback(string message)
{
if (AfterJoinServiceCallback != null)
{
AfterJoinServiceCallback(message);
}
}
}
方法内的调用将是相同的,但会按照它们附加的顺序调用所有附加的目标方法。
{{1}}