У меня возникла проблема с событием, которое приходит из другого потока, я не могу вызвать свою функцию в первой теме.Получение ошибки, что я не могу использовать объект, потому что он находится на неправильном потоке
Это код:
namespace Gestion_Photo_CM
{
/// <summary>
/// Logique d'interaction pour MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
GestionRecherche gRech = new GestionRecherche();
Dispatcher disp = Dispatcher.CurrentDispatcher;
public MainWindow()
{
InitializeComponent();
gRech.evt_creer_objimage += afficherimage;
}
/// <summary>
/// Affichage dynamique des images
/// </summary>
/// <param name="path"></param>
public void afficherimage(Image obj)
{
if (disp.CheckAccess())
{
this.Dispatcher.Invoke(delegate() { afficherimage(obj); });
}
else
{
this.RootGrid.Children.Add(obj);
}
}
/// <summary>
/// Validation du chemin entré
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_valid_Click(object sender, RoutedEventArgs e)
{
string cheminDossier = tbfolderpath.Text;
Thread thScanDossier = new Thread(delegate() { gRech.ScanDossiers(cheminDossier); });
thScanDossier.SetApartmentState(ApartmentState.STA);
thScanDossier.Start();
}
}
}
Когда программа доходит до этой строки:
this.RootGrid.Children.Add(obj);
Исключение говорит, что он не может использовать объект, поскольку он находится на другом Thread.
Спасибо за ваш ответ парень. Я просто пропустил! символ в этой строке, но он делает то же самое, когда я его тестирую. –
@ C.MARTIN, в этом случае проблема заключается в том, что вы создаете 'Image' на фоновом потоке. –