我正在使用 C# wpf 并想拍攝一張相機照片,然后在完成事件調用后 - 在 MainWindow 中更改一些控件。問題是事件是在與主線程不同的線程中調用的,并且要運行我的NextState函數(shù)(更改一些控件),它必須是主線程(否則我得到帶有警告的消息框,什么也沒有發(fā)生)。這是我的代碼:public partial class PhotoCapture : UserControl{ private bool ready; private System.Timers.Timer timer; private readonly Object lockObj = new Object(); public PhotoCapture(PhotoCaptureState photoCaptureState) { InitializeComponent(); ready = false; PictureManager.LoadCompleted += PictureManager_LoadCompleted; CameraManager.TakePicture(); timer = new System.Timers.Timer(200); timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed); timer.Enabled = true; } private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { bool change = false; lock(lockObj) { if (ready) { change = true; } } if (change) { MessageBox.Show("ready"); timer.Enabled = false; PictureManager.LoadCompleted -= PictureManager_LoadCompleted; NextState(); } } private void PictureManager_LoadCompleted() { lock (lockObj) { ready = true; } } private void NextState() { MainWindow wnd = (MainWindow)Application.Current.MainWindow; App app = (App)wnd.contentControl.Content; app.NextState(); }}有趣的是,我收到幾個“就緒”消息框,看起來根本沒有執(zhí)行NextStage。我不知道為什么會這樣。我將不勝感激任何幫助
2 回答

喵喵時光機
TA貢獻1846條經驗 獲得超7個贊
您是正確的,它是在不同的線程上執(zhí)行的。
您可以使用調用NextState()
主線程上的方法Dispatcher
。
Dispatcher.Invoke(() = > NextState());
- 2 回答
- 0 關注
- 184 瀏覽
添加回答
舉報
0/150
提交
取消