回答編集履歴

1

解決例追記

2018/11/12 10:09

投稿

nobonobo
nobonobo

スコア3367

test CHANGED
@@ -15,3 +15,141 @@
15
15
  walkはSynchronizeメソッドに関数を渡すとその処理がメインゴルーチンで動く仕掛けを持っています。
16
16
 
17
17
  上記の解決例を参考に作り直してみましょう。
18
+
19
+
20
+
21
+ 解決例(追記):
22
+
23
+
24
+
25
+ ```go
26
+
27
+ package main
28
+
29
+
30
+
31
+ import (
32
+
33
+ "fmt"
34
+
35
+ "log"
36
+
37
+ "time"
38
+
39
+
40
+
41
+ "github.com/lxn/walk"
42
+
43
+ . "github.com/lxn/walk/declarative"
44
+
45
+ )
46
+
47
+
48
+
49
+ func main() {
50
+
51
+ fmt.Println("Start!")
52
+
53
+ go func() {
54
+
55
+ // PCの情報を取得する
56
+
57
+ getInfo()
58
+
59
+ fmt.Println("PC情報の取得に成功しました。")
60
+
61
+ }()
62
+
63
+ showWindow() // ウインドウが閉じるまでブロックします(閉じるまでreturnしない)
64
+
65
+ }
66
+
67
+
68
+
69
+ // 受け渡し用構造体
70
+
71
+ type MyLoadWindow struct {
72
+
73
+ *walk.MainWindow
74
+
75
+ progressBar *walk.ProgressBar
76
+
77
+ }
78
+
79
+
80
+
81
+ var mw = &MyLoadWindow{}
82
+
83
+
84
+
85
+ func showWindow() {
86
+
87
+
88
+
89
+ // 画面サイズ取得
90
+
91
+ sizeX := 300
92
+
93
+ sizeY := 100
94
+
95
+
96
+
97
+ // 画面情報設定
98
+
99
+ MW := MainWindow{
100
+
101
+ AssignTo: &mw.MainWindow,
102
+
103
+ Title: "待機中",
104
+
105
+ Size: Size{
106
+
107
+ sizeX,
108
+
109
+ sizeY},
110
+
111
+ Font: Font{PointSize: 12},
112
+
113
+ Layout: VBox{},
114
+
115
+
116
+
117
+ Children: []Widget{
118
+
119
+
120
+
121
+ ProgressBar{
122
+
123
+ AssignTo: &mw.progressBar,
124
+
125
+ MarqueeMode: true,
126
+
127
+ },
128
+
129
+ },
130
+
131
+ }
132
+
133
+
134
+
135
+ if _, err := MW.Run(); err != nil {
136
+
137
+ log.Fatal(err) // エラーはあれば表示しましょう
138
+
139
+ }
140
+
141
+ }
142
+
143
+
144
+
145
+ func getInfo() {
146
+
147
+ time.Sleep(10 * time.Second)
148
+
149
+ fmt.Println("get Info")
150
+
151
+ mw.MainWindow.Synchronize(func(){mw.MainWindow.Close()}) // メインgoroutineからウインドウのクローズを呼ぶ
152
+
153
+ }
154
+
155
+ ```