如果WPF应用程序具有多个控件(TextBox)。
我想做的是在静态方法中调用该文本框:
private static void Transiever(object sender, ReceivedEventArgs e)
{
FunkTasterServiceClient client = new FunkTasterServiceClient();
client.Endpoint.Address = new EndpointAddress(new Uri(HERE I WANT TO CALL THE TEXTBOX (serviceURL.Text),
client.Endpoint.Address.Identity, client.Endpoint.Address.Headers);
client.GetReceivedTelegram(e.Telegram.ToString());
}
但这是不可能的。我试图创建一个新的Mainwindow实例来调用该文本框。但得到了错误:
The calling thread must be STA, because many UI components require this.
如何安全地调用文本框?有人可以帮忙吗?谢谢!
答案 0 :(得分:0)
Thread thread = new Thread(() =>
{
///Do what you what ever you want here...e.g Invoke the textbox
System.Windows.Threading.Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
答案 1 :(得分:0)
真正不清楚为什么您需要直接访问文本框而不是简单地获取其中的信息。我相信是这样的。
下面是如何从另一个线程获取文本框中的信息。它通过将属性绑定到 viewmodel 并将viewmodel公开为可从静态方法访问的静态来完成;哪个进程可以获取文本框中保存的当前数据。
按照以下步骤访问文本框中的ServiceUrl信息。
ServiceUrl
的字符串属性创建一个ViewModel,该属性遵循INotifyPropetyChanged并在主页上实例化它。ServiceUrl
作为双向绑定。Transiever
调用的类上,创建对步骤1中使用的ViewModel类的static
属性引用。Transiever
运行时,访问静态ViewModel的ServiceUrl
属性并根据需要提取数据。注意事项
Transiever
吗?答案 2 :(得分:0)
我能想到的唯一方法就是创建一个窗口的静态引用,并通过静态窗口引用对象访问TextBox。像这样:
public partial class MyWindow
{
public static System.Windows.Window windowRef;
public MyWindow()
{
InitializeComponent();
Initialize();
}
private void Initialize()
{
windowRef = this;
}
private static void Transiever(object sender, ReceivedEventArgs e)
{
FunkTasterServiceClient client = new FunkTasterServiceClient();
client.Endpoint.Address =
new EndpointAddress(new Uri((windowRef.serviceURL.Text),
client.Endpoint.Address.Identity, client.Endpoint.Address.Headers);
client.GetReceivedTelegram(e.Telegram.ToString());
}
}
我没试过,但我认为这应该有效。如果没有,请告诉我。