How to run something in the STA thread?

后端 未结 5 1280
礼貌的吻别
礼貌的吻别 2020-11-29 03:17

In my WPF application I do some async communication (with server). In the callback function I end up creating InkPresenter objects from the result from server. This requires

5条回答
  •  庸人自扰
    2020-11-29 04:06

    You can start STA Threads like so:

        Thread thread = new Thread(MethodWhichRequiresSTA);
        thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA
        thread.Start(); 
        thread.Join(); //Wait for the thread to end
    

    The only problem is that your result object must be passed along somehow.. You can use a private field for that, or dive into passing along parameters into threads. Here I set the foo data in a private field and start up the STA Thread to mutate the inkpresenter!

    private var foo;
    public void SearchForFooCallbackMethod(IAsyncResult ar)
    {
        foo = GetFooFromAsyncResult(ar); 
        Thread thread = new Thread(ProcessInkPresenter);
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
        thread.Join(); 
    }
    
    private void ProcessInkPresenter()
    {
        var inkPresenter = XamlReader.Parse(foo.Xaml) as InkPresenter;
    }
    

    Hope this helps!

提交回复
热议问题