This is a migrated thread and some comments may be shown as answers.

Threading issue with RadDocking

1 Answer 115 Views
Docking
This is a migrated thread and some comments may be shown as answers.
Ryan
Top achievements
Rank 1
Ryan asked on 08 Oct 2013, 12:20 AM
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?

1 Answer, 1 is accepted

Sort by
0
George
Telerik team
answered on 11 Oct 2013, 01:35 PM
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 >>
Tags
Docking
Asked by
Ryan
Top achievements
Rank 1
Answers by
George
Telerik team
Share this question
or