gpt4 book ai didi

c# - WCF,从服务访问 Windows 窗体控件

转载 作者:太空狗 更新时间:2023-10-29 22:35:18 26 4
gpt4 key购买 nike

我有一个托管在 Windows 窗体中的 WCF 服务。

如何从我的服务中的方法访问表单的控件?

比如我有

public interface IService    {
[ServiceContract]
string PrintMessage(string message);
}

public class Service: IService
{
public string PrintMessage(string message)
{
//How do I access the forms controls from here?
FormTextBox.Text = message;
}
}

最佳答案

首先,ServiceContract属性应该在接口(interface)上,而不是PrintMessage()方法上。

使用您的示例的更正版本,您可以这样做。

[ServiceContract]
public interface IService
{
[OperationContract]
string PrintMessage(string message);
}
public class Service : IService
{
public string PrintMessage(string message)
{
// Invoke the delegate here.
try {
UpdateTextDelegate handler = TextUpdater;
if (handler != null)
{
handler(this, new UpdateTextEventArgs(message));
}
} catch {
}
}
public static UpdateTextDelegate TextUpdater { get; set; }
}

public delegate void UpdateTextDelegate(object sender, UpdateTextEventArgs e);

public class UpdateTextEventArgs
{
public string Text { get; set; }
public UpdateTextEventArgs(string text)
{
Text = text;
}
}

public class MainForm : Form
{
public MainForm()
{
InitializeComponent();

// Update the delegate of your service here.
Service.TextUpdater = ShowMessageBox;

// Create your WCF service here
ServiceHost myService = new ServiceHost(typeof(IService), uri);
}
// The ShowMessageBox() method has to match the signature of
// the UpdateTextDelegate delegate.
public void ShowMessageBox(object sender, UpdateTextEventArgs e)
{
// Use Invoke() to make sure the UI interaction happens
// on the UI thread...just in case this delegate is
// invoked on another thread.
Invoke((MethodInvoker) delegate {
MessageBox.Show(e.Text);
} );
}
}

这基本上是@Simon Fox 建议的解决方案,即使用委托(delegate)。可以这么说,这有希望只是在骨头上放一些肉。

关于c# - WCF,从服务访问 Windows 窗体控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1366317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com