我正在使用 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。我不知道为什么会这样。我将不胜感激任何帮助
喵喵时光机
相关分类