C# 当满足if语句时,尝试在三个映像之间循环
目前,我的代码中有四个C# 当满足if语句时,尝试在三个映像之间循环,c#,C#,目前,我的代码中有四个if语句用于更改某些显示。在InQueueInRing>10的if语句中,我希望它在红色、黄色和绿色图像之间每隔0.5秒循环一次,直到条件不再为真。我不知道从哪里开始骑自行车的图像。我是否只是多次列出图像源,并在它们之间加一个线程。Sleep(1000) 我试着用 但我无法将system.threading.timer类型转换为system.windows.media.imagesource。更新代码如下 下面是我的if语句 if (e.CmsData.Skill.
if
语句用于更改某些显示。在InQueueInRing>10
的if
语句中,我希望它在红色、黄色和绿色图像之间每隔0.5秒循环一次,直到条件不再为真。我不知道从哪里开始骑自行车的图像。我是否只是多次列出图像源,并在它们之间加一个线程。Sleep(1000)
我试着用
但我无法将system.threading.timer类型转换为system.windows.media.imagesource。更新代码如下
下面是我的if
语句
if (e.CmsData.Skill.AgentsAvailable > 0)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
{
callsWaitingData.Text = e.CmsData.Skill.AgentsAvailable.ToString();
callsWaitingData.Foreground = new SolidColorBrush(Colors.Green);
callsWaitingText.Text = "Available";
callimgae.Source = new BitmapImage(new Uri("pack://application:,,,/ScoreBoardClientTest;component/images/circle_green.png", UriKind.Absolute));
}));
}
else if (e.CmsData.Skill.InQueueInRing > 10)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
{
callsWaitingData.Text = e.CmsData.Skill.InQueueInRing.ToString();
callsWaitingData.Foreground = new SolidColorBrush(Colors.Red);
callsWaitingText.Text = "Waiting";
timer = new system.threading.timer(OnTImerEllapsed, new object(), 0, 2000);
}));
}
else if (e.CmsData.Skill.InQueueInRing > 0)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
{
callsWaitingData.Text = e.CmsData.Skill.InQueueInRing.ToString();
callsWaitingData.Foreground = new SolidColorBrush(Colors.Red);
callsWaitingText.Text = "Waiting";
callimgae.Source = new BitmapImage(new Uri("pack://application:,,,/ScoreBoardClientTest;component/images/circle_red.png", UriKind.Absolute));
}));
}
else if (e.CmsData.Skill.AgentsAvailable == 0)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
{
callsWaitingData.Text = e.CmsData.Skill.AgentsAvailable.ToString();
callsWaitingData.Foreground = new SolidColorBrush(Colors.Yellow);
callsWaitingText.Text = "Available";
callimgae.Source = new BitmapImage(new Uri("pack://application:,,,/ScoreBoardClientTest;component/images/circle_yellow.png", UriKind.Absolute));
}));
}
private void OnTimerEllapsed(object state)
{
if (!this.Dispatcher.CheckAccess())
{
this.Dispatcher.Invoke(new Action(LoadImages));
}
}
private void LoadImages()
{
string stringUri = switcher ? @"pack://application:,,,/ScoreBoardClientTest;component/images/circle_red.png" :
@"pack://application:,,,/ScoreBoardClientTest;component/images/circle_yellow.png";
// @"pack://application:,,,/ScoreBoardClientTest;component/images/circle_green.png";
this.callimgae.Source = new BitmapImage(new Uri(stringUri));
switcher = !switcher;
}
因此,我看不到您代码的其余部分,但是如果您要经常使用这些图像,请确保在执行此类操作(为了性能)之前将它们预加载或缓存到某个位置 有很多线程/进程类可以使用,但我喜欢使用的基本类就是线程类。下面是如何设置线程
Thread myThread = new Thread(threadDelegate);
threadDelegate属于ThreadStart类,它是您希望线程执行的工作。下面是设置threadDelegate的一种方法
ThreadStart threadDelegate = new ThreadStart(() => {
while (isCycling == true)
{
// Your code here
Thread.Sleep(1000);
}
});
isCycling是指循环在某些情况下停止,例如在一些奇数循环之后或过早退出。最后,您可以让线程使用start方法启动您提供的委托/工作
myThread.Start();
如果需要父线程(即主线程)要等待线程停止或不继续运行,直到循环完成,您可以在myThread上使用Join方法。更新了代码,尝试了我找到的另一篇文章中的新尝试。另外要注意的是,在尝试中,我尝试使用了所有三个图像,但由于仅说明赋值、调用、增量、减量、,新的对象表达式可以用作语句。虽然它不是一个声明,格式正确。好吧,我想我自己通过一些尝试和错误修正了这个问题。正确的答案是这个问题,我会在堆栈溢出允许的情况下标记自己回答的问题。。。我以前从未预加载过图像,而性能是我开始有问题的地方。你能在任何情况下对此提供帮助吗?你使用的是什么平台?如果是WPF、ASP或通用C#,我可以为您指出正确的方向。如果是Unity或者虚幻或者任何游戏引擎,我都不会帮上什么忙。我对它们的了解还不够,无法给您提供关于性能的明确答案。我正在使用WPF作为一个平台。VisualStudio15,尽管我确信这不会有什么不同。请将图像加载到参考资料中。在VS中,您可以将复制的图像粘贴到“资源”选项卡中,以方便发送。是的,ferday提到了一种提高性能的方法。创建一个资源文件将创建一个表,该表将保存您的图像,您可以使用您给它的唯一键检索图像。