能否使每个winform 窗体独立一个线程来运行?

lzheng2001 2009-03-18 08:43:19
MDI 窗口下打开多个子窗口,我在其中一个窗体中执行 Threading.Thread.Sleep(5000) 这样的代码,则所有窗体都不能操作,我估计原因可能是,所有窗体都是同一个线程的, 我的问题是,能否使每个窗体都独立一个线程,在窗体内部执行sleep等语句并不影响其它窗体的正常操作?
...全文
796 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangyishi 2009-03-18
  • 打赏
  • 举报
回复
可以,在新线程中创建窗口即可。但一般不采取这种编程模式,我猜想你的用意,可以在你的另外窗口启动新线程来达到。
在新线程中创建窗口的测试代码:
public partial class Form1 : Form
{
private bool mNotMainThread = false;
public Form1()
{
InitializeComponent();
}

public Form1(bool NotMainThread)
{
InitializeComponent();
mNotMainThread = NotMainThread;
}

private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(ThreadFun);
t.Start();
}

public void ThreadFun()
{
Form1 frm = new Form1(true);
frm.ShowDialog();
}

private void Form1_Load(object sender, EventArgs e)
{
if (mNotMainThread)
Thread.Sleep(5000);
}
}
一只熊猫 2009-03-18
  • 打赏
  • 举报
回复
不知道,关注。
laorer 2009-03-18
  • 打赏
  • 举报
回复
在 main 方法前加个 [MTAThread] 怎么样样
v6hacker 2009-03-18
  • 打赏
  • 举报
回复
呵呵.俺菜.不会.学习了.....
lzheng2001 2009-03-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 heng_s 的回复:]
何必仅仅为了一个Sleep就去单独开一个线程呢?

你用这样的代码就可以不影响其他窗体的操作了:


VB.NET code
'Wait-等待指定的时间数
Public Sub Wait(ByVal lMilliseconds As Integer)
Dim lTm As Integer
lTm = System.Environment.TickCount
Do While System.Environment.TickCount - lTm < lMilliseconds
If _StopWait Then
Exit Do
Else

[/Quote]

实际情况比我提问的要复杂得多,我一开始就是用你的方法来做,但Application.DoEvents() 还是不能满足要求,某些事件如果执行比较长时间,则doevents()会停下来.

我试试楼上的用线程启动窗体看运行效果如何.
oo渣渣oo 2009-03-18
  • 打赏
  • 举报
回复
何必仅仅为了一个Sleep就去单独开一个线程呢?

你用这样的代码就可以不影响其他窗体的操作了:


'Wait-等待指定的时间数
Public Sub Wait(ByVal lMilliseconds As Integer)
Dim lTm As Integer
lTm = System.Environment.TickCount
Do While System.Environment.TickCount - lTm < lMilliseconds
If _StopWait Then
Exit Do
Else
Threading.Thread.CurrentThread.Sleep(1)
System.Windows.Forms.Application.DoEvents()
End If
Loop
_StopWait = False
lTm = Nothing
End Sub
floadcloud 2009-03-18
  • 打赏
  • 举报
回复
开新窗体打开时,开启一个线程就行了
zzxap 2009-03-18
  • 打赏
  • 举报
回复
public partial class Form1 : Form
{
private bool mNotMainThread = false;
public Form1()
{
InitializeComponent();
}

public Form1(bool NotMainThread)
{
InitializeComponent();
mNotMainThread = NotMainThread;
}

private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(ThreadFun);
t.Start();
}

public void ThreadFun()
{
Form1 frm = new Form1(true);
frm.ShowDialog();
}

private void Form1_Load(object sender, EventArgs e)
{
if (mNotMainThread)
Thread.Sleep(5000);
}
}這個就可以了

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧