我正在使用 C# wpf 并想拍摄一张相机照片,然后在完成事件调用后 - 在 MainWindow 中更改一些控件。问题是事件是在与主线程不同的线程中调用的,并且要运行我的NextState函数(更改一些控件),它必须是主线程(否则我得到带有警告的消息框,什么也没有发生)。这是我的代码: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(); }}有趣的是,我收到几个“就绪”消息框,看起来根本没有执行NextStage。我不知道为什么会这样。我将不胜感激任何帮助
2 回答
喵喵时光机
TA贡献1846条经验 获得超7个赞
您是正确的,它是在不同的线程上执行的。
您可以使用调用NextState()
主线程上的方法Dispatcher
。
Dispatcher.Invoke(() = > NextState());
- 2 回答
- 0 关注
- 157 浏览
添加回答
举报
0/150
提交
取消