簡體   English   中英

從主應用程序中的另一個線程訪問WPF應用程序的屬性

[英]Accessing attributes of a WPF application from another thread in main application

我在主應用程序的線程上啟動了WPF應用程序。

現在,我想從主線程訪問此WPF應用程序中的文本框。

我試圖使用調度程序,但是我找不到辦法。

這是我的代碼

  class program
{
    public static event MyEventHandler event1;
    static Application a;
    static void fun()
    {
        a = new Application();
        a.StartupUri = new Uri("MainWindow.xaml", System.UriKind.Relative);
        //a.initializeComponent();
        a.Run();

    }

     //[STAThread]
    static void Main(string[] args)
    {
        Thread newThread = new Thread(new ThreadStart(fun));
        newThread.SetApartmentState(ApartmentState.STA);
        newThread.Start();
        Trace.WriteLine("rest");
        //I WANT TO ACCESS THE TEXT BOX FROM HERE 


    }
}
  1. 主線程需要對窗口和/或文本框的引用

    • 讓創建窗口/文本框的線程在靜態變量中對窗口/文本框的引用
  2. 當主線程想要訪問文本框時,它必須切換到創建文本框的線程並從該線程獲取結果。

從該問題的答案中:

string x;
TheTextBox.Dispatcher.BeginInvoke((Action)(() => x = TheTextBox.Text));

您可能需要執行以下操作來循環應用程序的活動窗口以找到所需的窗口,然后在該窗口上調用方法以獲取所需的實際文本框元素。

    public void AccessTextBox(string windowName, string textBoxName)
    {
        foreach (Window windowToCheck in a.Windows)
        {
            if (!windowToCheck.Name.Equals(windowName, textBoxName))
                continue;
            windowToCheck.Dispatcher.Invoke(((WindowTypeName)windowToCheck).AccessTextBox(textBoxName));
        }
    }

Dispatcher.Invoke調用是使您進入UI線程,執行指定方法的調用並返回到當前線程的調用。

這是偽代碼(也很丑陋:)),但是應該使您走上正確的道路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM