Threading issue with RadDocking

2 posts, 0 answers
  1. Ryan
    Ryan avatar
    5 posts
    Member since:
    Sep 2013

    Posted 07 Oct 2013 Link to this post

    The company for which I'm consulting has a specific business requirement that each instance of
    certain WPF Windows MUST have their own UI Thread and NOT share the default UI thread created
    by .NET Framework when the application is first loaded. From a coding perspective, 
    this is easy to
    accomplish and works well, until introducing the Telerik RadDocking control in the WPF Xaml.  I have
    copied and pasted the xaml form telerik's RadDocking example directly from the sample code without
    modifying it. When the app launches, both instances of WindowWithTelerikDockingFromExample
    [seemingly] load without issue at first, in fact, the second instance of the window (titled "Window on
    seperate UI Thread...") is operational and works, as does "MainWindow". It's not until you activate
    the second window and then activate the main window, and then switch back to the second window
    that the following exception is thrown:

    "The calling thread cannot access this object because a different thread owns it."

    Locating source for 'c:\TB\117\WPF_Scrum\Release_WPF\Sources\Development\Controls\Docking\Docking\Parts\AutoHideArea.cs'. Checksum: MD5 {3e 1e cd 2a 97 89 30 7e c9 1c 28 c2 28 13 aa e9}
    The file 'c:\TB\117\WPF_Scrum\Release_WPF\Sources\Development\Controls\Docking\Docking\Parts\AutoHideArea.cs' does not exist.
    Looking in script documents for 'c:\TB\117\WPF_Scrum\Release_WPF\Sources\Development\Controls\Docking\Docking\Parts\AutoHideArea.cs'...
    Looking in the projects for 'c:\TB\117\WPF_Scrum\Release_WPF\Sources\Development\Controls\Docking\Docking\Parts\AutoHideArea.cs'.
    The file was not found in a project.
    Looking in directory 'C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\'...
    Looking in directory 'C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc\'...
    Looking in directory 'C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\src\atl\'...
    Looking in directory 'C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\'...
    The debug source files settings for the active solution indicate that the debugger will not ask the user to find the file: c:\TB\117\WPF_Scrum\Release_WPF\Sources\Development\Controls\Docking\Docking\Parts\AutoHideArea.cs.
    The debugger could not locate the source file 'c:\TB\117\WPF_Scrum\Release_WPF\Sources\Development\Controls\Docking\Docking\Parts\AutoHideArea.cs'.

    Here is the code from my files:

    App.xaml.cs:
    public partial class App : Application
     {
         protected override void OnStartup(StartupEventArgs e)
         {
             this.ShutdownMode = System.Windows.ShutdownMode.OnLastWindowClose;
     
             // Init the application's main window...
             var mainWindow = new WindowWithTelerikDockingFromExample();
             mainWindow.Title = "Main Window";
             this.MainWindow = mainWindow;
             mainWindow.Show();
     
             // init another instance of the window with the telerik docking, on a seperate UI thread...
             var thread = new Thread(() =>
             {
                 SynchronizationContext.SetSynchronizationContext(new DispatcherSynchronizationContext(Dispatcher.CurrentDispatcher));
                 var window2 = new WindowWithTelerikDockingFromExample();
                 window2.Title = "Window on seperate UI Thread...";
                 window2.Show();
                 System.Windows.Threading.Dispatcher.Run();
                 window2.Closed += (s2, e2) =>
                     {
                         window2.Dispatcher.InvokeShutdown();
                     };
     
             });
     
             thread.SetApartmentState(ApartmentState.STA);
             thread.Start();
     
             base.OnStartup(e);
         }
     
     }

    WindowWithTelerikDockingFromExample.xaml:

    <Window x:Class="TelerikDockingThreadIssueExample.WindowWithTelerikDockingFromExample"
            Title="Window with xaml copy and pasted from Telerik example" Height="300" Width="300">
        <Grid>
            <telerik:RadDocking   BorderThickness="0" Padding="0">
                <telerik:RadDocking.DocumentHost>
                    <telerik:RadSplitContainer>
                        <telerik:RadPaneGroup>
                            <telerik:RadDocumentPane Header="Document 1" Title="Document 1" />
                        </telerik:RadPaneGroup>
                    </telerik:RadSplitContainer>
                </telerik:RadDocking.DocumentHost>
     
                <telerik:RadSplitContainer InitialPosition="DockedLeft">
                    <telerik:RadPaneGroup>
                        <telerik:RadPane Header="Pane Left 1" IsPinned="False">
                            <TextBlock Text="Pane Left 1" />
                        </telerik:RadPane>
                        <telerik:RadPane Header="Pane Left 2" IsPinned="False">
                            <TextBlock Text="Pane Left 2" />
                        </telerik:RadPane>
                        <telerik:RadPane Header="Pane Left 3" IsPinned="False">
                            <TextBlock Text="Pane Left 3" />
                        </telerik:RadPane>
                        <telerik:RadPane Header="Pane Left 4" IsPinned="False">
                            <TextBlock Text="Pane Left 4" />
                        </telerik:RadPane>
                    </telerik:RadPaneGroup>
                </telerik:RadSplitContainer>
     
                <telerik:RadSplitContainer InitialPosition="DockedRight">
                    <telerik:RadPaneGroup>
                        <telerik:RadPane Header="Pane Right 1" IsPinned="False">
                            <TextBlock Text="Pane Right 1" />
                        </telerik:RadPane>
                    </telerik:RadPaneGroup>
                </telerik:RadSplitContainer>
     
                <telerik:RadSplitContainer InitialPosition="DockedBottom">
                    <telerik:RadPaneGroup>
                        <telerik:RadPane Header="Pane Bottom 1" IsPinned="False">
                            <TextBlock Text="Pane Bottom 1" />
                        </telerik:RadPane>
                    </telerik:RadPaneGroup>
                </telerik:RadSplitContainer>
            </telerik:RadDocking>
        </Grid>
    </Window>

    Any ideas?
  2. George
    Admin
    George avatar
    1332 posts

    Posted 11 Oct 2013 Link to this post

    Hi Ryan,

    Thank you for reporting us this exception in the RadDocking. The control is not tested in multithread environment and we weren't aware of such problems. The issue is logged in our PITS here - http://www.telerik.com/support/pits.aspx#/public/wpf/15920. We will look into the exception for our upcoming releases and we will consider your suggestion for the fix.

    Thank you for your feedback. I am glad to update your Telerik points as well.

    Regards,
    George
    Telerik
    TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WPF.
    Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
    Sign up for Free application insights >>
  3. UI for WPF is Visual Studio 2017 Ready
Back to Top