Hi,
your szenario works fine. Try following code:
<Page
x:Class="App1.Page09"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App09"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Page.DataContext>
<local:ViewModel/>
</Page.DataContext>
<Grid Height="600">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Content="Start" Command="{Binding Cmd}"/>
<ListBox Grid.Row="1" ItemsSource="{Binding View}"/>
</Grid>
</Page>
Code:
using App1;
using App1.Core;
using System;
using System.Collections.ObjectModel;
using System.Data.SqlClient;
using System.Threading;
using System.Windows.Input;
using Windows.UI.Xaml.Controls;
namespace App09
{
public class ViewModel
{
public ObservableCollection<string> View { get; set; } = new ObservableCollection<string>();
public ICommand Cmd { get => new RelayCommand(CmdExec); }
private void CmdExec(object state)
{
for (int i = 0; i < 100; i++)
{
var m = new Model() { Result = View };
var pts = new ParameterizedThreadStart(m.GetData);
var t = new Thread(pts);
t.Start();
}
}
}
internal class Model
{
private SynchronizationContext sc = SynchronizationContext.Current;
internal ObservableCollection<string> Result { get; set; }
internal int ThreadNumber { get; set; }
internal void GetData(object state)
{
try
{
using (SqlConnection cn = new SqlConnection(Settings.CnSql))
{
cn.Open();
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Tab1", cn))
{
var rdr = cmd.ExecuteReader();
if (rdr.Read()) Report(rdr[0]);
cmd.Cancel();
rdr.Close();
}
}
}
catch (Exception ex)
{
Report(ex.Message);
}
}
private void Report(object msg) =>
sc.Post(new SendOrPostCallback((par) => Result.Add($"{ThreadNumber} - {par}")), msg);
}
}
ConnectionString:
public static class Settings
{
public static string CnSql { get; } = "Data Source=192.168.0.111;Initial Catalog=DemoDB;Integrated Security=True;";
}
Set Authentication: