System.Timers.Timer是否在与创建它的线程不同的线程上经过?
让我们说我有一个定时器,每5秒触发一次.当计时器触发时,在已用方法中,某些对象被修改.让我们说修改这个对象需要很长时间,比如10秒.在这种情况下,我是否可能遇到线程冲突?
我有一个嵌入了Geospace地图的程序.地图的事件处理在单独的线程上处理,以使地图保持响应(例如,单击地图时触发的事件).
我遇到的问题是当地图触发一个事件时,我的程序需要更新它的gui中的一些东西,并且还回调到地图以处理在地图上放置图片.
我尝试在this.Dispatcher.Invoke中包装整个事件处理程序方法,这使我回到主UI线程.这对于更新我的GUI非常有用,但是当我回调到地图时,我仍然在UI线程上,这可能会导致地图中出现一些问题.
基本上,为了使这项工作,每次我想要更改我的gui上的控件时,我将不得不运行dispatcher.invoke.有没有办法我可以自动执行此操作而不在dispatcher.invoke中包装每个调用?我希望这一切都有道理.
下面是我正在谈论的事件的一些示例代码.
private void Map_OnMapClicked(object sender, MapClickedEventArgs e)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
{
// Do something to update my gui
}));
Map.DoSomethingInTheMap();
this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
{
// Do something to update my gui
}));
//etc etc etc
}
Run Code Online (Sandbox Code Playgroud) 我正试图解决看似简单的数学问题.我可以将问题写成for循环,但我不确定如何将其转换为等式.有人可以帮忙吗?
x = 10;
for(int i=0; i<3000; i++)
{
x = x^2
}
Run Code Online (Sandbox Code Playgroud) 有没有办法在每次单击列表视图中的选择时触发selectionchanged事件,而不是仅在它更改时?
例如,假设我有一个只包含一个对象的列表视图.用户单击该对象,该对象包含填充下面某些文本框的信息.用户开始更改这些文本框中的某些值(未绑定到对象).然后他们决定他们不想要那些文本框中的内容,因此他们想要将所有内容重置为listview中对象中的内容.但是当他们单击列表视图中的一个对象时,没有任何反应,因为选择没有改变.
希望有道理.有谁知道我怎么能解决这个问题?
我有一个WPF,vista样式进度条,我想更改画笔.我已经将前景画笔设置为另一种颜色,但是有一种嗖嗖的动画效果,其颜色仍然是默认的绿色.我怎么能改变这个?
我有两个课,我想在树视图中显示.
在我的主窗口中,我有一个可观察的某种类型对象的集合,称之为对象a.对象a包含另一种对象的可观察集合,对象b.每个对象b包含一个可观察的对象b集合.
例如,我可能有一些看起来像这样的东西
ListOfObjectA的
-ObjectA1
--ListOfObjectB的
---对象B
---- ListOfObjectB的
-----对象B
-ObjectA2
--ListOfObjectB的
---对象B
我的xaml应该将树视图绑定到类似的东西?
对不起,如果我没有解释好这个,我是wpf的新手.
我有一个程序需要10-20秒才能启动.我需要在程序启动时显示一个带有进度条的窗口.我知道BackgroundWorker是正确的方法,但我很遗憾没有时间使用线程重做整个gui.这是我正在尝试的一些代码,但它不起作用.谁能帮忙..?
using System;
using System.Threading;
using System.Windows;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Thread t = new Thread(ShowLoadingWindow);
t.SetApartmentState(ApartmentState.STA);
t.Priority = ThreadPriority.Highest;
t.Start();
DoSomeLongTask();
keepLooping = false;
}
bool keepLooping = true;
private void ShowLoadingWindow()
{
LoadingWindow lw = new LoadingWindow();
lw.Show();
while (keepLooping)
{
Thread.Sleep(1);
}
lw.Close();
}
private void DoSomeLongTask()
{
for (int i = 0; i < 20000; i++)
{
GC.Collect();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
加载窗口只是一个带有进度条的裸窗口.这怎么行不通?