在一个窗体中点一个按钮执行另一个类中的方法
public void PublishAllHouse(List<int> WebId, List<int> HouseId)
{
int AllCount = 0;
try
{
//new Thread(() =>
//{
// Control.BeginInvoke(new Action(() =>
// {
Thread.Sleep(200);
for (int i = 0; i <= HouseId.Count - 1; i++)
{
for (int j = 0; j <= WebId.Count - 1; j++)
{
PublishHouseFactory publishhousefactory = new PublishHouseFactory();
PublishHouse publishhouse = null;
publishhouse = publishhousefactory.CreatePublishHouse(WebId[j].ToString());
PublishHouse.WebInfoId = WebId[j];
PublishHouse.HouseInfoId = HouseId[i];
AllCount++;
Thread t = new Thread(new ThreadStart(publishhouse.ToPublishHouse));
t.Start();
//Thread.Sleep(500);
//Control.Invoke((MethodInvoker)delegate
//{
// publishhouse.ToPublishHouse();
//});
}
}
// }));
//}).Start();
}执行这个方法时窗体不能拖动了,怎么解决,谢谢!!
public void PublishAllHouse(List<int> WebId, List<int> HouseId)
{
int AllCount = 0;
try
{
//new Thread(() =>
//{
// Control.BeginInvoke(new Action(() =>
// {
Thread.Sleep(200);
for (int i = 0; i <= HouseId.Count - 1; i++)
{
for (int j = 0; j <= WebId.Count - 1; j++)
{
PublishHouseFactory publishhousefactory = new PublishHouseFactory();
PublishHouse publishhouse = null;
publishhouse = publishhousefactory.CreatePublishHouse(WebId[j].ToString());
PublishHouse.WebInfoId = WebId[j];
PublishHouse.HouseInfoId = HouseId[i];
AllCount++;
Thread t = new Thread(new ThreadStart(publishhouse.ToPublishHouse));
t.Start();
//Thread.Sleep(500);
//Control.Invoke((MethodInvoker)delegate
//{
// publishhouse.ToPublishHouse();
//});
}
}
// }));
//}).Start();
}执行这个方法时窗体不能拖动了,怎么解决,谢谢!!
这里是不是以开始就要和ui同步,执行Invoke吧所有操作都括进去了?
线程的目的是尽量释放ui线程占用。
你检查一下,在必要时候,使用
this.Invoke((EventHandler)delegate
{
//更新ui
});
非ui的消耗时间的不要Invoke中写。
Invoke就把线程和ui线程同步到一起了。
哪个窗体要想拖动也是以来消息,你要么一段时间执行Application.DoEvents();要么再开一个线程执行Application.Run(窗体);来单独处理窗体消息。
new Thread(() =>
{
for (int i = 0; i <= HouseId.Count - 1; i++)
{
for (int j = 0; j <= WebId.Count - 1; j++)
{
PublishHouseFactory publishhousefactory = new PublishHouseFactory();
PublishHouse publishhouse = null;
publishhouse = publishhousefactory.CreatePublishHouse(WebId[j].ToString());
PublishHouse.WebInfoId = WebId[j];
PublishHouse.HouseInfoId = HouseId[i];
AllCount++;
publishhouse.ToPublishHouse();
}
} }).Start();